3 回答

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊
將double __屬性更改為_ClassName__method_name,使其比隱含的語義隱私更加私有_method_name。
如果您確實(shí)愿意,從技術(shù)上講您仍然可以使用它,但是大概沒人會這樣做,因此出于維護(hù)代碼抽象的原因,該方法在那時(shí)也可能是私有的。
class Parent(object):
def _protected(self):
pass
def __private(self):
print("Is it really private?")
class Child(Parent):
def foo(self):
self._protected()
def bar(self):
self.__private()
c = Child()
c._Parent__private()
這具有允許方法不與子類方法名稱沖突的其他好處(或有人說主要的好處)。

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊
另外PEP8說
僅對非公共方法和實(shí)例變量使用前導(dǎo)下劃線。
為避免名稱與子類沖突,請使用兩個(gè)前導(dǎo)下劃線來調(diào)用Python的名稱處理規(guī)則。
Python將這些名稱與類名稱混為一談:如果class Foo具有名為的屬性__a,則不能通過進(jìn)行訪問Foo.__a。(堅(jiān)持的用戶仍然可以通過調(diào)用獲得訪問權(quán)限Foo._Foo__a。)通常,雙引號下劃線僅應(yīng)用于避免名稱與設(shè)計(jì)為子類的類中的屬性發(fā)生沖突。
_such_methods按照慣例,您也應(yīng)該遠(yuǎn)離。我的意思是你應(yīng)該把他們當(dāng)成private
添加回答
舉報(bào)