關於子類訪問父類的類變量問題
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