本人剛剛接觸python不久, 在學習類繼承的時候遇到了一點疑惑, 如下:
class A(object):
x = 1
class B(A):
B.x = 3
print(A.x) # 1
print(B.x) # 1
print(id(A.x)) # 4363216224
print(id(B.x)) # 4363216224
在子類中試圖修改這個類屬性失敗
但是如果我這樣改:
class A(object):
x = 1
class B(A):
# B.x = 3
x = 3
print(A.x) # 1
print(B.x) # 3
print(id(A.x)) # 4363216224
print(id(B.x)) # 4363216256
父類和子類中的類屬性x就不一樣了, 個人的疑惑如下:
B中重新創(chuàng)造了一個類屬性x, 不知道是不是這么理解?總體感覺很混淆, 沒有一個清晰的概念來理清這兩段代碼, 希望能有各位前輩能指點一下, 不勝感激!
感謝各位前輩的回答, 我用的是3.6, 不過當時是用的jupyter notebook編輯代碼的, 運行是沒問題, 但是剛剛自己在別的ide上面試了一下, 確實會報錯, 個人也很迷糊, 不知道是什么情況.
jupyter notebook截圖如下:
所以現(xiàn)在我也很不理解, 有沒有別的前輩出現(xiàn)過這樣的情況?
1: 這是因為這個是類屬性,類屬性可以通過類或者實例來訪問,當你創(chuàng)建一個類的實例的時候,所有的類屬性都會復(fù)制一份給這個實例,假設(shè)有
class A:
x = 1
a = A()
b = A()
此時a,b都從類那里得到了類屬性x, 用實例也就是a, b都可以訪問x, 也可以去修改它,但是它們互不影響
a.x = 2
b.x = 3
此時打印a.x 為2 b.x 為3,A.x 為 1
總之類屬性要通過類來修改,創(chuàng)建的實例都有類屬性的一份復(fù)制。
2:這里是你重寫了類的屬性,你在子類當中的修改不能影響到父類,要用父類來操作,不然就亂套了。
我這邊python報錯.
2.7
Traceback (most recent call last):
File "C:/work/python_proj/Odoo-erp_test/Src/ww.py", line 5, in <module>
class B(A):
File "C:/work/python_proj/Odoo-erp_test/Src/ww.py", line 6, in B
B.x = 3
NameError: name 'B' is not defined
==============================
更新
我覺得B.x = 3這句話的意思python解釋器會理解為 B.B.x = 3 所以報錯.
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓領(lǐng)域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務(wù)負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。