1. 程式人生 > >python的static class method and member

python的static class method and member

定義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去引用,得到也是那個“區域性”的,用類名加屬性才得到我想要的東西。

而具體是為什麼呢?暫時不清楚,問題先記著這裡吧。哪天再回頭來研究。好了,別卡在這裡了,繼續。