我一直在阅读有关 Python 中的魔术方法的文章,并且发现了很多关于覆盖它们以及它们的用途的信息,但是我无法找到语言中特定的运算符和操作映射到这些方法的位置(+查找__add__、+=查找__iadd__、从类创建新对象可能会调用__new__和__init__等)是否有地方可以看到当 Python 解释器(或任何较低级别的机制)遇到加号时会发生什么?
+
__add__
+=
__iadd__
__new__
__init__
在 Python 中,魔法方法(也称为“dunder”方法)确实映射到特定的运算符和行为,并且有官方资源记录了这种映射。当 Python 解释器遇到运算符或构造时,它会在内部将它们转换为对相关对象的适当魔法方法的调用。
<
<=
>``>=``==``!=``__lt__``__le__``__gt__
obj[key]
__getitem__
__setitem__
operator
operator.add(a, b)``a.__add__(b)
object.c
这里列出了一些常见的 Python 运算符及其对应的魔法方法,以供快速参考:
-
__sub__
*
__mul__
/
__truediv__
//
__floordiv__
%
__mod__
**
__pow__
<<
__lshift__
>>
__rshift__
&
__and__
|
^
__xor__
==
__eq__
__lt__
[]
in
__contains__
数据模型文档有更详尽的列表,并解释了每种方法的目的以及 Python 在实现它们时期望的行为。