目标是创建一个类似于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])完全没用.
那么在运行时创建实例属性的正确方法是什么?
我正在阅读这个问题的答案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(我的解释)时,使用引用..)的语法比访问指针(->或(*))更好,更短.假设我有一套西装和四个西装子类: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.
什么是一个干净,高效的JavaScript实现来从字符串中去除前导和尾随空格?
例如:
" dog"
"dog "
" dog "
" dog "
一切都变成了
"dog"
HEAD和masterGit有什么区别?
我在GitHub上做了一个项目的克隆,并希望将我的更改推送到远程.但是我应该推动哪一个?

我见过一些在他们网站上使用自定义字体的新网站(除常规Arial,Tahoma等外).
它们支持大量的浏览器.
怎么做到这一点?同时也阻止人们免费下载字体,如果可能的话.
我的问题是关于我在主题中提到的那条线,我可以在生产代码中的许多地方看到.
整体代码如下所示:
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)'用法本身.
从我得知该类java.lang.String在Java中被宣布为final时,我想知道为什么会这样?当时我没有找到任何答案,但这篇文章:如何在Java中创建String类的副本?让我想起了我的疑问.
当然,String提供了我所需要的所有功能,并且从未想过任何需要扩展String类的操作,但你仍然永远不会知道某人可能需要什么!
那么,有没有人知道设计师在决定最终时的意图是什么?
在CYGWIN上,我想要一个BASH脚本:
"关闭部分"让我感到困惑.
目前,我有一个蹩脚的解决方案.在一个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
我如何跟踪隧道过程,所以我知道要杀死哪一个?
有谁知道为什么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)
严格地说,没有整数除法这样的东西(按定义除法是产生有理数的运算,整数是其中一小部分.)