關於子類訪問父類的類變量問題


關於子類訪問父類的類變量問題

Python作為一門弱類型語言,創建變量時不用像C語言那樣事先聲明(如:int xxx/char xxx),只要是=符號左邊的變量Python找不到,它就會自己去創建。源此有題如下:

class A(object):
    x = 1

class B(A):
    pass

class C(A):
    pass

B.x = 2
A.x = 3
print(A.x, B.x, C.x)

問:輸出結果為何?
答:3 2 3


這是因為,在執行B.x = 2這一語句時,B發自己沒有x誒,那就創建一個咯!C不同,沒有=讓它創建變量,於是去父類那里找,因此輸出跟A.x的值一樣。

如何證明B.x中的x不是A中的x呢?很簡單,比較id值:

In [75]: A.x is C.x
Out[75]: True

In [76]: A.x is B.x
Out[76]: False


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM