2009-12-26 70 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

相关问题