52

可以在类中使用的特殊双下划线/dunder 方法的完整列表在哪里?(例如, __init__, __new__, __len__, __add__)

4

10 回答 10

66

请查看 Python 语言参考中的特殊方法名称部分

于 2009-09-13T21:05:41.183 回答
17

如果像我一样,你想要一个简单、朴素的清单,这里就是。我根据接受的答案中的Python 文档链接对其进行了编译。

__abs__
__add__
__and__
__call__
__class__
__cmp__
__coerce__
__complex__
__contains__
__del__
__delattr__
__delete__
__delitem__
__delslice__
__dict__
__div__
__divmod__
__eq__
__float__
__floordiv__
__ge__
__get__
__getattr__
__getattribute__
__getitem__
__getslice__
__gt__
__hash__
__hex__
__iadd__
__iand__
__idiv__
__ifloordiv__
__ilshift__
__imod__
__imul__
__index__
__init__
__instancecheck__
__int__
__invert__
__ior__
__ipow__
__irshift__
__isub__
__iter__
__itruediv__
__ixor__
__le__
__len__
__long__
__lshift__
__lt__
__metaclass__
__mod__
__mro__
__mul__
__ne__
__neg__
__new__
__nonzero__
__oct__
__or__
__pos__
__pow__
__radd__
__rand__
__rcmp__
__rdiv__
__rdivmod__
__repr__
__reversed__
__rfloordiv__
__rlshift__
__rmod__
__rmul__
__ror__
__rpow__
__rrshift__
__rshift__
__rsub__
__rtruediv__
__rxor__
__set__
__setattr__
__setitem__
__setslice__
__slots__
__str__
__sub__
__subclasscheck__
__truediv__
__unicode__
__weakref__
__xor__
于 2016-05-11T20:26:07.587 回答
13

Dive Into Python 有一个很好的附录

于 2009-09-13T21:11:25.860 回答
7

这是所有 Python 魔术方法的完整参考

于 2009-09-13T21:06:14.067 回答
5

如果您更喜欢从 CLI 而不是浏览器阅读文档,请执行此操作。

$ pydoc SPECIALMETHODS

于 2016-06-16T05:03:20.170 回答
4

请参阅Python 快速参考

于 2009-09-13T21:16:10.383 回答
3

对于那些对 Python 比较陌生并且文档通常不太容易访问的人(比如我自己):有人写了一个很好的介绍,其中有很多关于特殊(魔法)方法如何工作、如何使用它们等的示例.

于 2013-09-06T15:16:59.970 回答
2

Python 的双下划线(“dunder”)方法也称为数据模型方法,因为它们是 Python 数据模型的核心,为自定义(重载)内置方法提供了协议。这就是为什么它们被列在 Python 文档的“数据模型”部分的原因。

于 2017-09-03T22:47:30.617 回答
0

继@Justin 的回答之后,他包含了 95 个项目,以下是我可以推断出的 dunder 方法:# 2.7 上的 1053.10 上的 108

from functools import partial
from itertools import chain


# From https://github.com/Suor/funcy/blob/0ee7ae8/funcy/funcs.py#L34-L36
def rpartial(func, *args):
    """Partially applies last arguments."""
    return lambda *a: func(*(a + args))


dunders = tuple(filter(rpartial(str.startswith, "__"),
                frozenset(chain.from_iterable((
# https://docs.python.org/3/library/stdtypes.html
                    chain.from_iterable(map(dir, (int, float, complex,
                                                  list, tuple, range,
                                                  str, bytes,
                                                  # 2.7: unicode,
                                                  bytearray, memoryview,
                                                  set, frozenset, dict, 
                                                  type, None, Ellipsis, 
                                                  NotImplemented, object)
                                            )),
# https://docs.python.org/3/library/functions.html#dir
                    dir(),
# https://docs.python.org/3/library/stdtypes.html#special-attributes
                    ("__dict__", "__class__", "__bases__", "__name__",
                     "__qualname__", "__mro__", "__subclasses__",
# https://docs.python.org/3/reference/datamodel.html#slots
                     "__slots__")
                )))))

3.10 上的输出:

('__abs__',
 '__abstractmethods__',
 '__add__',
 '__alloc__',
 '__and__',
 '__annotations__',
 '__base__',
 '__bases__',
 '__basicsize__',
 '__bool__',
 '__builtins__',
 '__cached__',
 '__call__',
 '__ceil__',
 '__class__',
 '__class_getitem__',
 '__contains__',
 '__delattr__',
 '__delitem__',
 '__dict__',
 '__dictoffset__',
 '__dir__',
 '__divmod__',
 '__doc__',
 '__enter__',
 '__eq__',
 '__exit__',
 '__file__',
 '__flags__',
 '__float__',
 '__floor__',
 '__floordiv__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getformat__',
 '__getitem__',
 '__getnewargs__',
 '__gt__',
 '__hash__',
 '__iadd__',
 '__iand__',
 '__imul__',
 '__index__',
 '__init__',
 '__init_subclass__',
 '__instancecheck__',
 '__int__',
 '__invert__',
 '__ior__',
 '__isub__',
 '__itemsize__',
 '__iter__',
 '__ixor__',
 '__le__',
 '__len__',
 '__loader__',
 '__lshift__',
 '__lt__',
 '__mod__',
 '__module__',
 '__mro__',
 '__mul__',
 '__name__',
 '__ne__',
 '__neg__',
 '__new__',
 '__or__',
 '__package__',
 '__pos__',
 '__pow__',
 '__prepare__',
 '__qualname__',
 '__radd__',
 '__rand__',
 '__rdivmod__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__reversed__',
 '__rfloordiv__',
 '__rlshift__',
 '__rmod__',
 '__rmul__',
 '__ror__',
 '__round__',
 '__rpow__',
 '__rrshift__',
 '__rshift__',
 '__rsub__',
 '__rtruediv__',
 '__rxor__',
 '__set_format__',
 '__setattr__',
 '__setitem__',
 '__sizeof__',
 '__slots__',
 '__spec__',
 '__str__',
 '__sub__',
 '__subclasscheck__',
 '__subclasses__',
 '__subclasshook__',
 '__text_signature__',
 '__truediv__',
 '__trunc__',
 '__weakrefoffset__',
 '__xor__')
于 2021-12-02T01:31:04.387 回答
-3

熟悉 dir 函数。

于 2009-09-13T21:49:58.053 回答