2009-12-26 66 views
0

特殊的方法,例如(在Django):我如何獲得所有可用特殊方法的列表?

def __wrapper__ 
def __deepcopy__ 
def __mod__ 
def __cmp__ 
+0

你能改說你的問題嗎?我不確定你在問什麼。 – 2009-12-26 03:44:12

+2

你想要什麼? Django和Python的保留字有什麼區別?你只是想要一個Python的保留字列表嗎? – voyager 2009-12-26 03:59:37

+0

對不起,這是我寫英文的最高水平,我認爲你必須用你的想象力。 – zjm1126 2009-12-26 06:56:25

回答

5

的特殊方法名稱的列表是here,但它不是一個詳盡的魔法名字 - 例如,方法__copy____deepcopy__提到here相反,__all__變量是here,階級屬性,如__name____bases__等是here,依此類推。我不知道任何給定版本的語言中定義的所有這些名稱的任何單一權威列表。

但是,如果您想檢查任何單個給定的特殊名稱,比如說__foo__,只需在Python文檔的「快速搜索」框中進行搜索(任何上述URL都可以!) - 這樣你會發現它,如果它是正式的語言的一部分,並且如果你不要找到它,你會知道它是一些違反語言約定的包或框架的錯誤用法。

1

你可以找到他們的位置:http://docs.python.org/genindex-all.html#_

標識符與2領先+ 2尾隨下劃線的是課程special method names保留的。儘管現在可以定義這樣的標識符,但未來可能不會這樣。 __deepcopy__,__mod__和__cmp__都是Python中內置的特殊方法,用戶類可以重寫以實現特定於類的功能。

+0

除非重新定義語言,否則您將始終可以定義__something__'標識符。儘管您可能會覆蓋現有特殊方法名稱的變量標識,但您必須注意。 – voyager 2009-12-26 05:26:33

+0

嗯,文檔說「應用程序不應該期望使用這個約定來定義名稱」,這意味着行爲可能是未定義的(即它可能工作,可能會微妙地失敗,可能在未來版本中崩潰等) ... – jspcal 2009-12-26 22:54:09

8

要打印Python的保留字只是用

>>> import keyword 
>>> print(keyword.kwlist) 
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 
'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 
'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 
'raise', 'return', 'try', 'while', 'with', 'yield'] 

要閱讀的Python,read the manualDive into Python的特殊對象方法的說明。

另一個片斷則可以使用被

>>> [method for method in dir(str) if method[:2]=='__'] 
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', 
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', 
'__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', 
'__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', 
'__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', 
'__sizeof__', '__str__', '__subclasshook__'] 

看到所有建在str類的特殊方法。

+1

請注意,'dir()'不會在父類上顯示屬性。例如,'str .__ mro__'不包含在你的列表中。 – 2011-12-05 10:30:00

相關問題