1. 程式人生 > 程式設計 >Python小白不正確的使用類變數例項

Python小白不正確的使用類變數例項

不正確的使用類變數

看下面一個例子:

>>> class A(object):
...   x = 1
...
>>> class B(A):
...   pass
...
>>> class C(A):
...   pass
...
>>> print A.x,B.x,C.x
1 1 1

看起來沒有問題。

>>> B.x = 2
>>> print A.x,C.x
1 2 1

嗯哈,還是和預想的一樣

>>> A.x = 3
>>> print A.x,C.x
3 2 3

我了個去。只是改變了A.x,為啥C.x也變了?

在Python裡,類變數通常在內部被當做字典來處理並遵循通常所說的方法解析順序(Method Resolution Order (MRO))。因此在上面的程式碼中,因為屬性x在類C中找不到,因此它會往上去它的基類中查詢(在上面的例子中只有A這個類,當然Python是支援多重繼承(multiple inheritance)的)。換句話說,C沒有它自己獨立於A的屬性x。因此對C.x的引用實際上是對A.x的引用。(B.x不是對A.x的引用是因為在第二步裡B.x=2將B.x引用到了2這個物件上,倘若沒有如此,B.x仍然是引用到A.x上的。)

知識點補充:

類變數、例項變數概念

類變數:

類變數就是定義在類中,但是在函式體之外的變數。通常不使用self.變數名賦值的變數。類變數通常不作為類的例項變數的,類變數對於所有例項化的物件中是公用的。

例項變數:

例項變數是定義在方法中的變數,使用self繫結到例項上的變數,只是對當前例項起作用。

以上就是Python小白不正確的使用類變數例項的詳細內容,更多關於Python新手不正確的使用類變數的資料請關注我們其它相關文章!