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去引用,得到也是那个“局部”的,用类名加属性才得到我想要的东西。
而具体是为什么呢?暂时不清楚,问题先记着这里吧。哪天再回头来研究。好了,别卡在这里了,继续。
定义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去引用,得到也是那个“局部”的,用类名加属性才得到我想要的东西。
而具体是为什么呢?暂时不清楚,问题先记着这里吧。哪天再回头来研究。好了,别卡在这里了,继续。
相关文章推荐
- What is the difference between @staticmethod and @classmethod in Python?
- python staticmethod and classmethod方法
- python decorators, classmethod and staticmethod
- Python staticmethod and classmethod
- Class method differences in Python: bound, unbound and static
- python @classmethod和@staticmethod的区别
- python -- @classmethod @staticmethod区别和使用
- Python内置函数的staticmethod()与classmethod(),@staticmethod,@classmethod
- Reading Effictive java: static member class (SMC) and nonstatic member class(NSC)
- python classmethod staticmethod
- python @classmethod和@staticmethod
- Objective-C - difference between class method and static method?
- Python 实例方法、@staticmethod和@classmethod
- python基础理论(二)-- classmethod & staticmethod
- Python - base class and the AbstractMethod/Abst...
- Python 实例方法、@staticmethod和@classmethod
- Python @staticmethod vs @classmethod
- Python 实例方法、@staticmethod和@classmethod
- Python Static method vs class method
- python @,@staticmethod,@classmethod