2009-06-01 92 views

回答

72

風格指南:

  • _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__。不要發明這樣的名字;如文件所述,只能使用它們 。

+6

__method不是真的私人的,它與類名稱一起被破壞,但它仍然可以正常訪問。 +1雖然。 – 2009-06-01 18:19:42

0

以雙下劃線開頭並帶前綴的方法通常被如此標記以表明它們是Python語言規範的一部分。

1

這些方法被命名爲減少命名衝突的可能性。

0

以雙下劃線前綴和後綴的一些方法是特殊的。例如,無論何時創建該類的實例,都會調用__init__,並且在打印對象時調用__str__。基本上,他們可以用特殊的方式來調用。您可以像使用其他方法一樣使用它們,也可以通過與它們關聯的特殊方式調用它們。

我不知道雙下劃線全局函數(不屬於任何類),但我認爲沒有任何。

4

這些都是公約,所以它們不是強制執行的。儘管如此,你仍然可以預期:

__somename__ 

在Python語言規範本身定義的東西。不要在你自己的命名中使用它。

_somename 

這通常應該通過一些不同的機制而不是直接調用。類似於在大多數其他語言中聲明私有內容,但不以任何方式強制執行。

__somename 

這是真的應該被直接調用,並在內部錯位阻止你這麼做意外。如果您確實需要出於某種原因調用它,請查看文檔以瞭解具體方法。

以上任何一項都可以同樣適用於函數,變量或類名。

0

__name__的模式表示「魔術」方法。這是由各種功能稱爲像

str(x) -> x.__str__() 
repr(x) -> x.__repr__() 
x[0] -> x.__getitem__(0) 
etc 

單下劃線前綴,表示私有屬性,並且只能通過遵循的慣例。

雙下劃線前綴初始化名稱 - 修飾,其中名稱__attr在實例化時更改爲__Class_attr。

_method__的模式並不真正用於任何事情。

19
  • method只是一個普通的方法
  • _method不應該被稱爲除非你知道自己在做什麼,這通常意味着你自己寫的方法。
  • __method 2個下劃線用於防止名稱混搭。像這樣的屬性或方法可通過instance._ClassName__method訪問。雖然很多人把這稱爲「私人」,但它是而不是。您絕不應該使用此功能來阻止某人訪問此方法,而應使用_method
  • __method__用於修改實例行爲的特殊方法。不要說出你自己的方法。