可以在类中使用的特殊双下划线/dunder 方法的完整列表在哪里?(例如, __init__
, __new__
, __len__
, __add__
)
问问题
24489 次
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
于 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 上的 105和3.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 回答