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

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

關于python的繼承的一個疑問

瀏覽:334日期: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久久,三上悠亚国产精品一区二区三区
国产精品igao视频网网址不卡日韩 | 色爱av综合网| 久久精品 人人爱| 亚洲精品日本| 蜜桃久久精品一区二区| 99亚洲精品| 免费在线观看精品| 丝袜美腿一区二区三区| 91久久在线| 久久天堂影院| 欧美一区不卡| 99在线观看免费视频精品观看| 久久精品国产网站| 日韩高清电影一区| 国产情侣一区在线| 日韩av专区| 亚洲午夜黄色| 日本成人中文字幕| 日韩久久视频| 日韩综合一区二区三区| 国产在视频一区二区三区吞精| 日韩中文首页| 欧美一区自拍| 亚洲午夜久久久久久尤物| 国产精品精品| 日韩一区二区三区在线看| 日韩精品亚洲aⅴ在线影院| 久久夜色精品| 久久麻豆精品| 国内一区二区三区| 亚洲风情在线资源| 日韩啪啪电影网| 国产夫妻在线| 91精品国产成人观看| 美女视频免费精品| 欧美午夜不卡| 国产欧美久久一区二区三区| 视频一区视频二区中文字幕| 蜜臀久久精品| av在线最新| 精品高清久久| 国产精品美女在线观看直播| 国产精品久久国产愉拍| 蘑菇福利视频一区播放| 香蕉久久国产| 喷白浆一区二区| 视频一区二区三区中文字幕| 在线亚洲一区| 日韩精品一级中文字幕精品视频免费观看| 免费黄网站欧美| 日韩免费精品| 狠狠久久伊人| 亚洲成av在线| 免费观看在线综合| 美女视频黄久久| 中文字幕一区二区三区日韩精品 | 日韩在线黄色| 色婷婷色综合| 91精品视频一区二区| 国产农村妇女精品一二区| 91精品亚洲| 欧美亚洲色图校园春色| 久久av网站| 日本v片在线高清不卡在线观看| 亚洲中午字幕| 美女毛片一区二区三区四区最新中文字幕亚洲 | 国产日韩欧美一区二区三区| 久久精品999| 91成人精品| 国产欧美一区二区三区国产幕精品 | 婷婷成人综合| 日韩在线不卡| 国产视频一区二区在线播放| av资源中文在线天堂| 欧美日韩精品一本二本三本 | 黄色日韩在线| 亚洲天堂日韩在线| 欧美激情麻豆| 成人在线视频中文字幕| 亚洲欧美日韩国产综合精品二区 | 精品国产99| 日本中文字幕不卡| 亚洲欧美久久精品| 久久精品国产大片免费观看| 麻豆精品在线| 午夜久久av | 亚洲精品无吗| 久久精品二区亚洲w码| 久久国产精品毛片| 亚洲电影在线| 精品日韩视频| 国产综合激情| 女主播福利一区| 国产午夜精品一区二区三区欧美 | 国产精品久久久久9999高清| 免费不卡在线视频| 欧洲一级精品| 久久影院一区二区三区| 欧美天堂一区二区| 亚洲国产一区二区在线观看 | 久久69成人| 蜜桃视频欧美| 成人高清一区| 欧美永久精品| 国产成人精品一区二区三区免费| 国产综合视频| 国产美女精品视频免费播放软件| 蜜桃成人av| 日韩高清欧美激情| 日韩和欧美一区二区| 欧美激情一区| 亚洲精品护士| 久久国产三级精品| 麻豆免费精品视频| 丝袜美腿诱惑一区二区三区 | 日产欧产美韩系列久久99| 日韩久久一区| 捆绑调教美女网站视频一区| 国产精品主播在线观看| 狂野欧美性猛交xxxx| 国产精品sm| 波多野结衣久久精品| 精品国产精品久久一区免费式| 成人高清一区| 久久婷婷亚洲| 亚洲开心激情| 日韩中文字幕在线一区| 日本不卡免费高清视频在线| 日韩欧美二区| 日韩一区二区免费看| 欧美13videosex性极品| 狠狠久久婷婷| 日本午夜精品一区二区三区电影 | 国产精品久久久久av电视剧| 婷婷成人综合| **爰片久久毛片| 97精品国产一区二区三区| 亚洲精品系列| 欧美精选视频一区二区| 老牛影视一区二区三区| 精品视频91| 日韩av中文在线观看| 97精品国产| 亚洲日韩中文字幕一区| 成人国产精品| 亚洲免费网址| 精品三级在线| 日韩精品一区第一页| 国产欧美自拍一区| 国产欧美丝祙| 中文一区在线| 国产一区三区在线播放| 欧美日韩xxxx| 国产日韩高清一区二区三区在线 | 亚洲成人av观看| 日韩福利视频导航| 久久精品123| 成人精品国产亚洲| 高清久久精品| 丰满少妇一区| 老司机精品久久| 国产精品v一区二区三区| 免费人成精品欧美精品| 蜜臀久久99精品久久久久久9| 亚洲区欧美区| 国产日韩一区二区三区在线 | 午夜亚洲一区| 日韩毛片网站| 免费不卡中文字幕在线| 私拍精品福利视频在线一区| 日韩精品91| 成人片免费看| 午夜在线视频观看日韩17c| 成人午夜精品| 蜜桃精品在线| 香蕉精品久久| 蜜桃av一区二区三区电影| 日本aⅴ精品一区二区三区| 色网在线免费观看| 日本伊人午夜精品| 欧美xxxx性| 亚洲欧美日韩高清在线| 亚洲欧美网站| 日韩欧美少妇| 老司机精品久久| 亚洲精品中文字幕99999| 国产精品日本一区二区三区在线| 成人黄色av| 久久亚洲风情| 精品国产中文字幕第一页| 成人在线视频免费| 老牛国产精品一区的观看方式| 日本a级不卡| 亚洲特色特黄| 丝袜美腿诱惑一区二区三区| 国产精品久久久亚洲一区| 日韩精品久久理论片| 麻豆91精品| 午夜在线视频观看日韩17c| 亚洲五月婷婷|