如何获取所有特殊方法的列表?

0 投票
3 回答
6491 浏览
提问于 2025-04-15 17:22

特殊方法,比如在Django框架中,有一些特定的功能和用途:

def __wrapper__
def __deepcopy__
def __mod__
def __cmp__

3 个回答

1

你可以在这里找到大部分内容:http://docs.python.org/genindex-all.html#_

以两个下划线开头和两个下划线结尾的名字是专门留给特殊方法名称用的。虽然现在可以定义这样的名字,但将来可能就不行了。像__deepcopy__、__mod__和__cmp__这些都是Python内置的特殊方法,用户可以重写这些方法来实现特定于类的功能。

9

要打印出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中特殊对象方法的解释,可以查看手册或者深入了解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类的所有内置特殊方法。

6

这里有一个特殊方法名称的列表,具体可以查看这个链接,不过这个列表并不是所有魔法名称的完整清单。例如,方法__copy____deepcopy__这个链接中提到,而__all__变量在这个链接中可以找到,像__name____bases__这些类属性则在这个链接中有介绍,等等。我不知道有没有一个权威的列表能涵盖语言的每个版本中所有这样的名称。

不过,如果你想查找某个特定的特殊名称,比如__foo__,只需在Python文档的“快速搜索”框中搜索它(上面提到的任何链接都可以!)——这样你就能找到它是否是语言的官方部分。如果你找不到,那就说明这个名称是某个包或框架错误使用的,违反了语言的规范。

撰写回答