0
Python's online documentation包含下面引用的描述。
有人能解釋一下它的含義嗎?什麼是班級私人名字?
2.3.2. Reserved classes of identifiers
__*
類專用名稱。當在類別定義的上下文中使用 時,將使用 格式重寫該類別中的名稱,以幫助避免基類 和派生類的「私有」屬性之間的名稱衝突。
Python's online documentation包含下面引用的描述。
有人能解釋一下它的含義嗎?什麼是班級私人名字?
2.3.2. Reserved classes of identifiers
__*
類專用名稱。當在類別定義的上下文中使用 時,將使用 格式重寫該類別中的名稱,以幫助避免基類 和派生類的「私有」屬性之間的名稱衝突。
每當class
裏面寫代碼使用兩個下劃線開始,但不也有兩個結尾的名稱強調了編譯器替換名稱以錯位的形式,其中包括類名:
>>> class Foo(object):
__bar = None
def set_bar(self, v):
self.__bar = v
>>> f = Foo()
>>> f.set_bar(42)
>>> f.__dict__
{'_Foo__bar': 42}
實際上這意味着當你創建子類時(假設子類的名稱與基類不同),你不會意外地與基類中使用的私有名稱相沖突。
它不是一個安全機制,因爲您仍然可以使用getattr
獲得'私有'值,甚至只是名稱的破壞形式,並且它不是完美的保護,因爲有時類層次結構既有基本具有相同名稱的派生類。
你實際上可以直接用'f._Foo_bar'獲得它☺ – zmo
@zmo,是的,你可以。爲什麼我從來沒有想過這件事?添加到我的答案。 – Duncan