小编Boa*_*ann的帖子

如何动态地向类添加属性?

目标是创建一个类似于db结果集的模拟类.

因此,例如,如果数据库查询使用dict表达式返回{'ab':100, 'cd':200},那么我想看到:

>>> dummy.ab
100
Run Code Online (Sandbox Code Playgroud)

起初我想也许我可以这样做:

ks = ['ab', 'cd']
vs = [12, 34]
class C(dict):
    def __init__(self, ks, vs):
        for i, k in enumerate(ks):
            self[k] = vs[i]
            setattr(self, k, property(lambda x: vs[i], self.fn_readyonly))

    def fn_readonly(self, v)
        raise "It is ready only"

if __name__ == "__main__":
    c = C(ks, vs)
    print c.ab
Run Code Online (Sandbox Code Playgroud)

但是c.ab返回一个属性对象.

更换setattr线路k = property(lambda x: vs[i])完全没用.

那么在运行时创建实例属性的正确方法是什么?

PS我知道如何__getattribute__使用该方法?

python monkeypatching runtime properties

193
推荐指数
11
解决办法
19万
查看次数

为什么'this'是指针而不是引用?

我正在阅读这个问题的答案C++的优点和缺点,并在阅读评论时得到了这个疑问.

程序员经常发现令人困惑的是"this"是指针而不是引用.另一个困惑是为什么"hello"不是std :: string类型但是求值为char const*(指针)(在数组到指针转换之后) - Johannes Schaub - litb于2008年12月22日在1:56

这只表明它没有使用与其他(后来的)语言相同的约定. - le dorfier 2008年12月22日3:35

我称之为"这个"的事情虽然是一个非常微不足道的问题.还有哎呀,感谢我在未定义行为的示例中捕获了一些错误.:)虽然我不明白大小的信息与第一个中的任何东西有关.根本不允许指针指向已分配的内存 - jalf 08年12月22日4:18

这是一个不变的人吗? - yesraaj 08年12月22日6:35

如果方法是const int getFoo()const,这可以是常量; < - 在getFoo的范围内,"this"是常量,因此是readonly.这可以防止错误并为调用者提供某种程度的保证,即对象不会更改. - 道格T. 2008年12月22日16:42

你不能重新分配"这个".即你不能做"this =&other;",因为这是一个右值.但这是T*类型,而不是T const类型.即它是一个非常量指针.如果你在const方法中,那么它是一个指向const的指针.T const.但是指针本身是无关紧要的 - 约翰内斯·绍布 - 在2008年12月22日17:53

想到这个"this":#define this(this_ + 0),编译器将"this_"创建为指向对象的指针,并使"this"成为关键字.你不能指定"this"因为(this_ + 0)是一个右值.当然那不是它的原因(没有这样的宏),但它可以帮助理解它 - Johannes Schaub - litb 2008年12月22日17:55

我的问题是,为什么this指针不是引用?使它成为指针的任何特殊原因?


为什么this作为参考的一些进一步的论点是有道理的:

  • 考虑Item 1来自More Effective C++:当保证我们有一个有效的对象,即不是NULL(我的解释)时,使用引用.
  • 此外,引用被认为比指针更安全(因为我们不能用一个迷路指针拧紧内存).
  • 第三,访问references(.)的语法比访问指针(->(*))更好,更短.

c++ pointers reference c++-faq this

178
推荐指数
3
解决办法
3万
查看次数

如何(在运行时)检查一个类是否是另一个类的子类?

假设我有一套西装和四个西装子类:Heart,Spade,Diamond,Club.

class Suit:
   ...
class Heart(Suit):
   ...
class Spade(Suit):
   ...
class Diamond(Suit):
   ...
class Club(Suit):
   ...
Run Code Online (Sandbox Code Playgroud)

我有一个接收套装作为参数的方法,它是一个类对象,而不是一个实例.更确切地说,它可能只收到四个值中的一个:Heart,Spade,Diamond,Club.我怎样才能做出确保这样的事情的断言?就像是:

def my_method(suit):
   assert(suit subclass of Suit)
   ...
Run Code Online (Sandbox Code Playgroud)

我正在使用Python 3.

python assert subclass

176
推荐指数
6
解决办法
9万
查看次数

JavaScript的String strip()?

什么是一个干净,高效的JavaScript实现来从字符串中去除前导和尾随空格?

例如:

" dog"

"dog "

" dog "

" dog "

一切都变成了

"dog"

javascript trim strip

175
推荐指数
8
解决办法
25万
查看次数

HEAD和master之间的区别

HEADmasterGit有什么区别?

我在GitHub上做了一个项目的克隆,并希望将我的更改推送到远程.但是我应该推动哪一个?

截图

git github master head

172
推荐指数
3
解决办法
8万
查看次数

使用CSS使用自定义字体?

我见过一些在他们网站上使用自定义字体的新网站(除常规Arial,Tahoma等外).

它们支持大量的浏览器.

怎么做到这一点?同时也阻止人们免费下载字体,如果可能的话.

css font-face

166
推荐指数
4
解决办法
35万
查看次数

if-else块中'if(0)'块的目的是什么?

我的问题是关于我在主题中提到的那条线,我可以在生产代码中的许多地方看到.

整体代码如下所示:

if (0) {
    // Empty braces
} else if (some_fn_call()) {
    // actual code
} else if (some_other_fn_call()) {
    // another actual code
    ...
} else {
    // default case
}
Run Code Online (Sandbox Code Playgroud)

其他分支与我的问题无关.我想知道放在if (0)这里的含义是什么.大括号是空的,所以我认为它不应该评论一些代码块.它会强制编译器进行一些优化还是意图不同?

我试图在SO和互联网上搜索这个明确的案例,但没有成功.关于JavaScript有类似的问题,但不是C.还有另一个问题,当在`if`条件中分配零时会发生什么?,但它讨论了对变量的零赋值,而不是'if(0)'用法本身.

c if-statement

140
推荐指数
11
解决办法
1万
查看次数

为什么String类在Java中声明为final?

从我得知该类java.lang.String在Java中被宣布为final时,我想知道为什么会这样?当时我没有找到任何答案,但这篇文章:如何在Java中创建String类的副本?让我想起了我的疑问.

当然,String提供了我所需要的所有功能,并且从未想过任何需要扩展String类的操作,但你仍然永远不会知道某人可能需要什么!

那么,有没有人知道设计师在决定最终时的意图是什么?

java string final

134
推荐指数
5
解决办法
8万
查看次数

用于设置临时SSH隧道的Bash脚本

在CYGWIN上,我想要一个BASH脚本:

  1. 创建到远程服务器的SSH隧道.
  2. 做一些使用隧道的本地工作.
  3. 然后关闭隧道.

"关闭部分"让我感到困惑.

目前,我有一个蹩脚的解决方案.在一个shell中,我运行以下命令来创建隧道.

# Create the tunnel - this works! It runs forever, until the shell is quit.
ssh -nNT -L 50000:localhost:3306 jm@sampledomain.com
Run Code Online (Sandbox Code Playgroud)

然后,在另一个shell窗口中,我做我的工作

# Do some MySQL stuff over local port 50000 (which goes to remote port 3306)
Run Code Online (Sandbox Code Playgroud)

最后,当我完成.我关闭第一个shell窗口来杀死隧道.

我想在一个脚本中完成所有这些:#create tunnel #do work#Kill tunnel

我如何跟踪隧道过程,所以我知道要杀死哪一个?

ssh bash

124
推荐指数
3
解决办法
6万
查看次数

为什么C#中的整数除法返回整数而不是浮点数?

有谁知道为什么C#中的整数除法返回一个整数而不是浮点数?它背后的想法是什么?(这只是C/C++的遗产吗?)

在C#中:

float x = 13 / 4;   
//imagine I used have an overridden == operator here to use epsilon compare
if (x == 3.0)
   print 'Hello world';
Run Code Online (Sandbox Code Playgroud)

此代码的结果将是:

'Hello world'
Run Code Online (Sandbox Code Playgroud)

严格地说,没有整数除法这样的东西(按定义除法是产生有理数的运算,整数是其中一小部分.)

c# division

120
推荐指数
7
解决办法
15万
查看次数