Python中的類屬性與實例屬性的區別:
以下的區別有意義么?
class A(object):
foo = 5 # some default value
Vs
class B(object): def init(self, foo=5):
self.foo = foo
如果你需要創建很多實例,這兩種風格在表現和空間要求上有什么區別么?當你閱讀代碼的時候,你是否會考慮這兩種風格的重要區別?
除了表現上的考慮,這邊有一個重要的語義上的不同。在類屬性的那個例子中,只有一個對象被引用。用實例屬性設置的實例中,實例有可能被多個對象引用。比如說:
>>> class A: foo =[ ]
>>> a, b = A(), A()
>>> a.foo.append(5)
>>> b.foo
[5]
>>> class A:
... def __init__(self): self.foo = [ ]
>>> a, b = A(), A()
>>> a.foo.append(5)
>>> b.foo
[]