class
foo(object):
version = 1.0
f = foo()
print foo.version # 1.0
print f.version # 1.0
foo.version += 0.1
print foo.version # 1.1
print f.version # 1.1
f.version += 0.1
print foo.version # not be modified, 1.1
print f.version # 1.2
del f.version
print foo.version # 1.1
print f.version # recover back, 1.1
類屬性version,可以通過類名和例項名訪問之,都得到1.0。此時,通過類名修改version,都得到1.1。而如果通過例項名修改屬性,發現此時建立了乙個新的例項屬性,其值為1.2,而類屬性依舊為1.1。最後刪除例項屬性,發現通過例項名呼叫再次得到類屬性值1.1。
class
foo(object):
version =
f = foo()
print foo.version['a'] # 1
print f.version['a'] # 1
foo.version['a'] = 2
print foo.version['a'] # 2
print f.version['a'] # 2
f.version['a'] = 3
print foo.version['a'] # be modified, 3
print f.version['a'] # 3
del f.version # raise exception here:attributeerror: 'foo' object attribute 'version' is read-only
類屬性可變的情況下,即使使用例項名修改屬性值,此時它還是類屬性。所以試圖通過例項名刪除時,會得到異常。
當乙個例項在類屬性被修改後才建立,那麼更新的值就將生效。類屬性的修改會影響到所有的例項。
class
foo(object):
version = 1.0
f1 = foo()
print f1.version # 1.0
foo.version += 0.1
print foo.version # 1.1
print f1.version # 1.1
f2 = foo()
print f2.version # 1.1
foo.version += 0.1
print f1.version # 1.2
print f2.version # 1.2
f1.version += 0.1
f2.version += 0.2
print foo.version # 1.2
print f1.version # 1.3
print f2.version # 1.4
foo.version += 1
print foo.version # 2.2
print f1.version # 1.3
print f2.version # 1.4
最後兩段**演示了,當通過例項名修改屬性,相當於此時建立了乙個新的例項屬性。所以其後再對類屬性進行修改(使用類名修改屬性值),將不會影響到例項屬性。 Python 類屬性與例項屬性
python在 init self 方法中定義的屬性為例項屬性,並且python的例項可以動態地增加例項屬性 直接跟在類名後邊定義的屬性都預設是類屬性 類似於c 的static變數 要明白雷和例項都是命名空間。類是類屬性的命名空間,例項則是例項屬性的命名空間。例項屬性能夠在名稱訪問 搜尋 中覆蓋類屬...
Python類屬性與例項屬性
類屬性為所有例項擁有,例項屬性為單個例項擁有class cls object count 0 count 0def init self cls.count cls.count 1 self.count self.count 1 p cls print 類屬性 d p.count print 例項屬性...
Python類屬性,例項屬性
dreamfor的部落格 1.python類資料屬性 定義在類裡面但在函式外面的變數,它們都是靜態的。一段很簡單的 但反應了很多 class a a 1 乙個類裡面有個屬性a a a b a a.a b.a a.a 這個屬效能被例項和類訪問 a.a 2 b.a a.a 改變例項a的屬性a,例項b和類...