日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

關于python的繼承的一個疑問

瀏覽:340日期:2022-08-18 14:17:38

問題描述

關于python的繼承的一個疑問

如圖所示,B 類繼承了 A 類;

當實例化對象時,B 類中沒有構造函數, 應該調用父類的構造函數 __init__

但是里邊的 self.__pirv() 為啥調用到父類 A 的 __priv, 而 self.pub() 又調到 B 中的 pub

求解?

問題解答

回答1:

在Python從__開始的方法名稱不是private,__的意思就讓Python做name mangling,name mangling的結果就是_A__priv。這樣的方法你應該不要overwrite。如果你想讓子類overwrite一個方法你只用_,不用__

回答2:

想了一下這個問題,我是這樣理解的:

class A(object): def __init__(self):self.__priv() # _A__priv()self.pub() def __priv(self):print('private A') def pub(self):print('public A')class B(A): def __init__(self):self.__priv() # 調用_B__priv()對比super(B, self).__init__() # 在這里顯式調用父類的`__init__()`方法 def __priv(self):print('private B') def pub(self):print('public B')if __name__ == ’__main__’: b = B()

在子類的實例調用__init__()方法時,從子類B本身中查找pub()方法,顯然是存在的,因此會調用B類自身的pub()方法;然而在調用__priv()方法時,由于Python對私有成員進行了名稱改編,你實際調用的是_A__priv()方法,而B類中并沒有這個方法,有的只有_B__priv(),因此調用父類A中的_A__priv(),于是產生了這樣的結果。這是我個人的理解,如果有誤歡迎指正,謝謝。

回答3:

關於問題本身, @Xavier 和 @Christoph 已經有詳細的說明了

如果你還不明白可以試著這樣做:

原本的代碼:

class A: def __init__(self):self.__priv() # 等等改成 self._A__priv()self.public() def __priv(self): # 等等改成 def _A__priv(self):print(’private of A’) def public(self):print(’public of A’)class B(A): def __priv(self): # 等等改成 self._B__priv(self):print(’private of B’) def public(self):print(’public of B’)b = B()

自行手動進行 name mangling:

class A: def __init__(self):self._A__priv()self.public() def _A__priv(self):print(’private of A’) def public(self):print(’public of A’)class B(A): def _B__priv(self):print(’private of B’) def public(self):print(’public of B’)b = B()

B 在這裡繼承了 A 的所有屬性包含:

__init__

_A__priv

public

而 B 自己定義了:

_B__priv

public (此處覆寫了 A 的 public)

所以最後你會看到 dir(b) 裡面有:

__init__ (從 A 繼承的)

_A__priv (從 A 繼承的)

_B__priv (自己定義的)

public (自己定義的)

最後當 __init__ 被呼叫時, 會調用 _A__priv, 而 B 裡面的確有這個方法

囉唆補充一下, Python 本身並沒有真正的 private 機制, 因為了解 name mangling 的人就能對以雙底線開頭的屬性做存取, 比如說我可以很輕易地寫出:

a = A()a._A__priv() # 防都防不住

簡單來說這個機制是個:

防呆 的機制, 不是個 防小人 的機制,

防止意外 存取的機制, 不是個防止 刻意存取 的機制

但是這個機制並非所有人都覺得好(個人就不喜歡, 使用雙底線開頭命名既麻煩也沒太多實際的幫助), 所以你可以在很多的 python 代碼中發現: 大家比較常使用以 單個底線 開頭的保護方式, 這種做法是個公認的慣例(註1), 對於稍有經驗的程序員來說足以防呆, 且不會有任何額外的效果和意外的狀況發生

Ian Bicking 有一段話是這樣說的 (Ian Bicking 是 Python 大神, 這段話我是在 Luciano Ramalho 的的 Fluent Python 中看到的):

永遠不要在前面使用兩個底線. 這是很讓人生氣的自私行為, 如果你不希望造成名稱衝突(註2), 可以明確地重整名稱(例如: _MyThing_blahblah). 實質上這與使用雙底線是同一件事情, 不過他是公開的, 雙底線是私下的行為.

所以我的建議是, 使用 _priv 會是更好的選擇.

註1: 以單底線開頭的屬性不會具有任何特殊的性質, 他僅僅是依靠 Python 程序員的共識而產生的具有象徵意義的符號性手法, 就好像有些語言會使用 const 來標明常量, 而我們也可以僅依賴 常量使用大寫命名 的共識來避免意外的狀況發生

註2: 之所以想要以 private 性質來保護屬性, 最常見的就是因為名稱衝突引起的意外存取

我回答過的問題: Python-QA

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲日产国产精品| 国产精品4hu.www| 亚洲成人av观看| 中文字幕在线视频网站| 在线日韩欧美| 欧美aa一级| 国产激情综合| 国产精品亚洲片在线播放| 日韩一二三区在线观看| 日韩国产精品久久久久久亚洲| 深夜福利一区| 午夜久久av| 欧美精品中文| 国产激情欧美| 久久精品国产999大香线蕉| 欧美激情一区| 国产一区二区三区亚洲| 精品黄色一级片| аⅴ资源天堂资源库在线| 日韩理论视频| 激情综合亚洲| 欧美午夜精品一区二区三区电影| 日韩欧美高清一区二区三区| 鲁大师成人一区二区三区| 午夜精品影视国产一区在线麻豆| 一区免费视频| 欧美日韩91| 精品国产中文字幕第一页| 99久久精品费精品国产| 久久精品xxxxx| 亚洲精品乱码日韩| 在线综合欧美| 亚洲日韩视频| 久久福利精品| 国产精品a久久久久| 91精品国产经典在线观看| 久久伦理在线| 久久亚洲视频| 国产精品扒开腿做爽爽爽软件| 日本一区二区免费高清| 夜久久久久久| 国产伦精品一区二区三区千人斩 | 在线看片日韩| 日韩在线一区二区| 色综合五月天| 精品欧美视频| 国产精品毛片久久久| 日韩精品国产精品| 欧美不卡高清| 蜜桃久久久久| 中文字幕在线看片| 午夜在线播放视频欧美| 亚洲涩涩在线| 天堂网在线观看国产精品| 亚洲a级精品| 日韩欧美三区| 国户精品久久久久久久久久久不卡 | av在线最新| 天堂久久av| 99日韩精品| 在线看片福利| 国精品一区二区| 日韩av成人高清| 亚洲黄色中文字幕| 日日夜夜免费精品视频| 精品久久视频| 免费黄网站欧美| 91视频精品| 国产精品三上| 免费在线欧美黄色| 亚洲尤物在线| 麻豆精品蜜桃视频网站| 中文一区在线| 精品久久久中文字幕| 免费高清在线一区| 97视频热人人精品免费| 亚洲精品伊人| 欧美激情另类| 欧美天堂一区| 国产不卡人人| 秋霞影院一区二区三区| aⅴ色国产欧美| 国产一区成人| 亚洲精品小说| 一区免费视频| 91av一区| 日韩.com| 国产一区二区中文| 日本精品不卡| 欧美韩日一区| 麻豆久久精品| 亚洲涩涩在线| 日本三级亚洲精品| 欧美福利专区| 高清在线一区| 国产乱子精品一区二区在线观看| 亚洲一级特黄| 国产精品原创| 国产精品4hu.www| 亚洲欧美日韩国产| 99热精品久久| 伊人久久国产| 麻豆国产91在线播放| 日本一区二区三区中文字幕| 99re国产精品| 人人精品亚洲| 日韩在线不卡| av中文字幕在线观看第一页| 你懂的亚洲视频| 国产精品视频一区视频二区| 亚洲精品伊人| 丝袜国产日韩另类美女| 合欧美一区二区三区| 欧洲亚洲一区二区三区| 久久免费福利| 精品国产亚洲一区二区三区| 日韩精品亚洲aⅴ在线影院| 一区二区三区国产在线| 99视频在线精品国自产拍免费观看| 99久久久久国产精品| 日韩欧美三级| 波多野结衣久久精品| 国产成人免费视频网站视频社区| 久久不见久久见中文字幕免费 | 亚洲精品伦理| 蜜芽一区二区三区| 亚洲免费影视| 激情91久久| 中文一区一区三区免费在线观 | 中文字幕成在线观看| 国产在线观看91一区二区三区 | 亚洲精品乱码久久久久久蜜桃麻豆 | 中文在线不卡| 日韩午夜av在线| 欧美日韩视频| 亚洲欧美高清| 视频一区日韩| 日韩一区二区三区高清在线观看| 日韩高清一区二区| 国产亚洲人成a在线v网站| 国产精品一页| 精品丝袜久久| 国产欧洲在线| 久久蜜桃av| 免费视频久久| 日韩和欧美一区二区| 久久精品xxxxx| 国产一区二区精品久| 亚洲黄色网址| 一本一本久久| 日韩精品亚洲专区| 国产精品17p| 福利片在线一区二区| 亚洲天堂资源| 国产一区二区精品| 91精品福利观看| 久久精品国产99国产| 久久精品一区二区不卡| 亚洲欧美日韩国产综合精品二区| 婷婷精品久久久久久久久久不卡| 国产精品激情电影| 中文另类视频| 丝袜美腿亚洲色图| 国产精品久久久久9999高清| 日韩精品2区| 在线一区免费观看| 国产精品主播在线观看| 中文字幕在线看片| 久久亚洲二区| 国产精品高清一区二区| 亚洲黄色免费av| 美女国产精品| 国产精品成人**免费视频 | 精品国产免费人成网站| 国产亚洲亚洲| 麻豆视频一区二区| 午夜久久福利| 国产欧美欧美| 亚洲福利精品| 欧美日韩午夜| 成人欧美一区二区三区的电影| 亚洲精品一二三区区别| 国产精品一区二区三区av| 色网在线免费观看| 亚洲日本三级| 最新中文字幕在线播放| 免费人成在线不卡| 久久亚洲精精品中文字幕| 免费黄色成人| 国产日本精品| 精品一区三区| 欧美激情99| 欧美一区=区| 国产一区二区三区精品在线观看| 老司机精品久久| 精品国产aⅴ| 久久亚洲美女| 久久电影tv| 国产亚洲字幕| 西西人体一区二区|