__method__
,method
和_method__
之間的區別是什麼?「__method__」和「方法」之間的區別
是否有任何或某些隨機的原因,人們認爲__doc__
應該是這樣的,而不是doc
。是什麼讓一種方法比另一種更特別?
__method__
,method
和_method__
之間的區別是什麼?「__method__」和「方法」之間的區別
是否有任何或某些隨機的原因,人們認爲__doc__
應該是這樣的,而不是doc
。是什麼讓一種方法比另一種更特別?
__method
:私有方法。__method__
:特殊的Python方法。他們被這樣命名以防止名稱衝突。 Check this page for a list of these special methods._method
:這是Python style guide中受保護方法的推薦命名約定。風格指南:
_single_leading_underscore
:弱 「內部使用」 的指標。例如。from M import *
不導入名稱以下劃線開頭的對象。
single_trailing_underscore_
:按慣例使用以避免與 衝突Python關鍵字Tkinter.Toplevel(master, class_='ClassName')
__double_leading_underscore
:命名類屬性時,調用名 的mangling(內側FooBar
類,__boo變得_FooBar__boo
;見下文)。
__double_leading_and_trailing_underscore__
:生活在用戶控制的命名空間中的「魔術」對象或 屬性。例如。__init__
,__import__
或__file__
。不要發明這樣的名字;如文件所述,只能使用它們 。
以雙下劃線開頭並帶前綴的方法通常被如此標記以表明它們是Python語言規範的一部分。
這些方法被命名爲減少命名衝突的可能性。
以雙下劃線前綴和後綴的一些方法是特殊的。例如,無論何時創建該類的實例,都會調用__init__
,並且在打印對象時調用__str__
。基本上,他們可以用特殊的方式來調用。您可以像使用其他方法一樣使用它們,也可以通過與它們關聯的特殊方式調用它們。
我不知道雙下劃線全局函數(不屬於任何類),但我認爲沒有任何。
這些都是公約,所以它們不是強制執行的。儘管如此,你仍然可以預期:
__somename__
在Python語言規範本身定義的東西。不要在你自己的命名中使用它。
_somename
這通常應該通過一些不同的機制而不是直接調用。類似於在大多數其他語言中聲明私有內容,但不以任何方式強制執行。
__somename
這是真的不應該被直接調用,並在內部錯位阻止你這麼做意外。如果您確實需要出於某種原因調用它,請查看文檔以瞭解具體方法。
以上任何一項都可以同樣適用於函數,變量或類名。
__name__
的模式表示「魔術」方法。這是由各種功能稱爲像
str(x) -> x.__str__()
repr(x) -> x.__repr__()
x[0] -> x.__getitem__(0)
etc
單下劃線前綴,表示私有屬性,並且只能通過遵循的慣例。
雙下劃線前綴初始化名稱 - 修飾,其中名稱__attr在實例化時更改爲__Class_attr。
_method__的模式並不真正用於任何事情。
method
只是一個普通的方法_method
不應該被稱爲除非你知道自己在做什麼,這通常意味着你自己寫的方法。__method
2個下劃線用於防止名稱混搭。像這樣的屬性或方法可通過instance._ClassName__method
訪問。雖然很多人把這稱爲「私人」,但它是而不是。您絕不應該使用此功能來阻止某人訪問此方法,而應使用_method
。__method__
用於修改實例行爲的特殊方法。不要說出你自己的方法。
__method不是真的私人的,它與類名稱一起被破壞,但它仍然可以正常訪問。 +1雖然。 – 2009-06-01 18:19:42