您的位置:首页 > 编程语言 > Python开发

python的static class method and member

2007-05-31 23:23 561 查看
昨天写程序的时候在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去引用,得到也是那个“局部”的,用类名加属性才得到我想要的东西。

而具体是为什么呢?暂时不清楚,问题先记着这里吧。哪天再回头来研究。好了,别卡在这里了,继续。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  class python c object