Python小白不正確的使用類(lèi)變量實(shí)例
不正確的使用類(lèi)變量
看下面一個(gè)例子:
>>> class A(object):... x = 1...>>> class B(A):... pass...>>> class C(A):... pass...>>> print A.x, B.x, C.x1 1 1
看起來(lái)沒(méi)有問(wèn)題。
>>> B.x = 2>>> print A.x, B.x, C.x1 2 1
嗯哈,還是和預(yù)想的一樣
>>> A.x = 3>>> print A.x, B.x, C.x3 2 3
我了個(gè)去。只是改變了A.x,為啥C.x也變了?
在Python里,類(lèi)變量通常在內(nèi)部被當(dāng)做字典來(lái)處理并遵循通常所說(shuō)的方法解析順序(Method Resolution Order (MRO))。因此在上面的代碼中,因?yàn)閷傩詘在類(lèi)C中找不到,因此它會(huì)往上去它的基類(lèi)中查找(在上面的例子中只有A這個(gè)類(lèi),當(dāng)然Python是支持多重繼承(multiple inheritance)的)。換句話說(shuō),C沒(méi)有它自己獨(dú)立于A的屬性x。因此對(duì)C.x的引用實(shí)際上是對(duì)A.x的引用。(B.x不是對(duì)A.x的引用是因?yàn)樵诘诙嚼顱.x=2將B.x引用到了2這個(gè)對(duì)象上,倘若沒(méi)有如此,B.x仍然是引用到A.x上的。)
知識(shí)點(diǎn)補(bǔ)充:
類(lèi)變量、實(shí)例變量概念
類(lèi)變量:
類(lèi)變量就是定義在類(lèi)中,但是在函數(shù)體之外的變量。通常不使用self.變量名賦值的變量。類(lèi)變量通常不作為類(lèi)的實(shí)例變量的,類(lèi)變量對(duì)于所有實(shí)例化的對(duì)象中是公用的。
實(shí)例變量:
實(shí)例變量是定義在方法中的變量,使用self綁定到實(shí)例上的變量,只是對(duì)當(dāng)前實(shí)例起作用。
以上就是Python小白不正確的使用類(lèi)變量實(shí)例的詳細(xì)內(nèi)容,更多關(guān)于Python新手不正確的使用類(lèi)變量的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. 詳細(xì)分析css float 屬性以及position:absolute 的區(qū)別2. xpath簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理3. ASP基礎(chǔ)知識(shí)Command對(duì)象講解4. 得到XML文檔大小的方法5. ASP實(shí)現(xiàn)加法驗(yàn)證碼6. html小技巧之td,div標(biāo)簽里內(nèi)容不換行7. PHP設(shè)計(jì)模式中工廠模式深入詳解8. ASP刪除img標(biāo)簽的style屬性只保留src的正則函數(shù)9. PHP循環(huán)與分支知識(shí)點(diǎn)梳理10. ASP中格式化時(shí)間短日期補(bǔ)0變兩位長(zhǎng)日期的方法
