我怎样才能获得所有可用特殊方法的清单?

时间:2009-12-26 03:43:05

标签: python django

例如,特殊方法(在Django中):

def __wrapper__
def __deepcopy__
def __mod__
def __cmp__

3 个答案:

答案 0 :(得分: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 :(得分:5)

特殊方法名称的列表是here,但它并不是一个详尽的魔术名称 - 例如,方法__copy____deepcopy__被提及here__all__变量为here__name____bases__等类属性为here,依此类推。我不知道任何给定版本的语言中定义的所有此类名称的任何单一权威列表。

但是,如果你想检查任何一个给定的特殊名称,比如__foo__,只需在Python文档的“快速搜索”框中搜索它(上述任何URL都可以!) - - 这样你会发现它是正式语言的一部分,如果你找到它你会知道这是一个错误的使用某些包或框架违反了语言的惯例。

答案 2 :(得分:1)

您可以在此处找到大部分内容:http://docs.python.org/genindex-all.html#_

带有2个前导+2个尾随下划线的

标识符当然是为special method names保留的。虽然现在可以定义这样的标识符,但将来可能不是这种情况。 __deepcopy __,__ mod__和__cmp__都是python中内置的特殊方法,用户类可以覆盖这些方法来实现特定于类的功能。