Python小白不正確的使用類變量實例
不正確的使用類變量
看下面一個例子:
>>> class A(object):... x = 1...>>> class B(A):... pass...>>> class C(A):... pass...>>> print A.x, B.x, C.x1 1 1
看起來沒有問題。
>>> 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
我了個去。只是改變了A.x,為啥C.x也變了?
在Python里,類變量通常在內(nèi)部被當做字典來處理并遵循通常所說的方法解析順序(Method Resolution Order (MRO))。因此在上面的代碼中,因為屬性x在類C中找不到,因此它會往上去它的基類中查找(在上面的例子中只有A這個類,當然Python是支持多重繼承(multiple inheritance)的)。換句話說,C沒有它自己獨立于A的屬性x。因此對C.x的引用實際上是對A.x的引用。(B.x不是對A.x的引用是因為在第二步里B.x=2將B.x引用到了2這個對象上,倘若沒有如此,B.x仍然是引用到A.x上的。)
知識點補充:
類變量、實例變量概念
類變量:
類變量就是定義在類中,但是在函數(shù)體之外的變量。通常不使用self.變量名賦值的變量。類變量通常不作為類的實例變量的,類變量對于所有實例化的對象中是公用的。
實例變量:
實例變量是定義在方法中的變量,使用self綁定到實例上的變量,只是對當前實例起作用。
以上就是Python小白不正確的使用類變量實例的詳細內(nèi)容,更多關(guān)于Python新手不正確的使用類變量的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. asp(vbscript)中自定義函數(shù)的默認參數(shù)實現(xiàn)代碼2. Ajax實現(xiàn)表格中信息不刷新頁面進行更新數(shù)據(jù)3. jsp EL表達式詳解4. jsp中sitemesh修改tagRule技術(shù)分享5. JavaWeb Servlet中url-pattern的使用6. 爬取今日頭條Ajax請求7. 如何使用瀏覽器擴展篡改網(wǎng)頁中的JS 文件8. ASP基礎(chǔ)知識VBScript基本元素講解9. ASP刪除img標簽的style屬性只保留src的正則函數(shù)10. JSP servlet實現(xiàn)文件上傳下載和刪除
