Python例項屬性與類屬性

2021-07-26 16:59:18 字數 1821 閱讀 8285

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和類...