昨天写程序的时候在static class member那里碰壁了。今天查了一下资料。这里写得很清除了:http://www.python.org/2.2.1/descrintro.html#staticmethods。
定义static class member就写在类开头就可以了。定义static class method要用到staticmethod还有classmethod。现在感觉又有什么地方需要用到这个呢?
关于static class member,本来以为比较简单了。刚才写了一个程序来看看具体的行为,发觉还是有些不太明白的地方:
class C(object):
s = 0
def __init__(self):
self.ns = 1
def p(self):
print 's:', C.s #a
print 's:', self.s #b
c1 = C()
c2 = C()
print C.s
print c1.s
print c2.s
C.s = 1 #0
print C.s
print c1.s
print c2.s
c1.s = 2 #1
c2.s = 3 #2
c1.p()
c2.p()
print C.s
print c1.s
print c2.s
输出是:
0
0
0
1
1
1
s: 1
s: 2
s: 1
s: 3
1
2
3
1
看现象是直接用类名加属性是可以修改类全局,而用实例去修改只是修改了一个拷贝。而在类里用self去引用,得到也是那个“局部”的,用类名加属性才得到我想要的东西。
而具体是为什么呢?暂时不清楚,问题先记着这里吧。哪天再回头来研究。好了,别卡在这里了,继续。