class a():
aa = 1
能夠訪問到類變量的操作:
# 1.
a.aa
# 2.
aobj = a()
aobj.aa
# 3.
class b(a):
pass
b.aa
# 4.
bobj = b()
bobj.aa
重新賦值:
a.aa = 2,影響所有
b.aa = 2, 影響bobj.aa
aobj或bobj, 只影響自己
結論:
實際上是一個向上溯源的過程。
例如bobj.aa,先找b有沒有實例變量self.aa;
沒有找到,則找超類有沒有實例變量self.aa;
沒有找到,則找b有沒有類變量b.aa;
沒有找到,則找超類有沒有類變量a.aa。
b.aa也是類似的過程,只不過只找類變量。
發生重新賦值a.aa = 2,bobj.aa向上溯源能夠繼承改變;
但一旦發生賦值bobj.aa = 3,相當於創建了實例變量self.aa;此后a.aa將不會影響bobj.aa;
實例不會影響類,aobj.aa = 4不會在類a中加一個定義的實例變量,故也不會影響bobj.aa;
實例變量就是一份復制,不會互相影響。