python的static class method and member

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

而具体是为什么呢?暂时不清楚,问题先记着这里吧。哪天再回头来研究。好了,别卡在这里了,继续。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值