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. IDEA Maven項(xiàng)目使用debug模式運(yùn)行Tomcat的詳細(xì)教程2. spring boot動(dòng)態(tài)切換數(shù)據(jù)源的實(shí)現(xiàn)3. python 繪制斜率圖進(jìn)行對(duì)比分析4. Android實(shí)現(xiàn)儀表盤(pán)控件開(kāi)發(fā)5. python GUI模擬實(shí)現(xiàn)計(jì)算器6. 利用python+ffmpeg合并B站視頻及格式轉(zhuǎn)換的實(shí)例代碼7. Android自定義短信倒計(jì)時(shí)view流程分析8. idea2020.1最新版永久破解/pycharm也可用(步驟詳解)9. IDEA中解決 git pull 沖突的方法10. IDEA下lombok安裝及找不到get,set的問(wèn)題的解決方法
