在搜索带解释的**杜德方法列表时,也就是Python魔法方法的小抄,我只在网上找到了几个资源--每个资源都只涉及杜德方法的一小部分。所以,这里是我从这些资源中收集到的127种dunder方法**(也叫*"魔法方法")*,按字母顺序排序。我以三种形式提供这些数据。
带解释的Python杜尔德方法表
| 名称 | 说明 |
__abs__ | 一个给定参数的绝对值 |
__add__ | x和y参数的加法x+y |
| __aenter__ | 像 __enter__() 一样,但必须返回一个可等待的值。 |
| 退出(exit) | 类似于 __exit__() 但必须返回一个可等待的值。 |
| 迭代器 | 返回一个异步的迭代器 |
| 和 | 对a和b的比特 "AND"。 |
| 返回一个异步迭代器 __anext__ | 返回一个可等待的,作为迭代器参数的下一个值 |
| __annotations__ | 一个包含与参数名(key)相关的注释(value)的dict。 |
| __await__ | 返回一个迭代器来实现可等待的对象 |
| __bases__ | 一个类对象的基类的元组。 |
| __bool__ | 对内置的 bool() 返回 False 或 True 的真值测试。如果未定义,调用 __len__() |
| __bytes__ | 由字节调用,计算一个对象的字节字符串表示法。这应该返回一个bytes对象。 |
| 调用__call__ | 当一个给定的实例作为一个函数被 "调用 "时被调用。 |
| __ceil__ | 实现内置函数round()和数学函数trunc(),floor()和ceil() |
| __class__ | 一个类实例所属的类 |
| __class_getitem__ | 返回代表通过在键中找到的类型参数对一个通用类进行专业化处理的对象。 |
| __closure__ | 无或单元格的元组,包含函数自由变量的绑定。 |
| 代码__ | 代表编译后的函数体的代码对象 |
| __coerce__ | 将 x 和 y 转换为相同的数字类型。 |
| __complex__ | 执行内置函数 complex() 来创建一个新的复数。 |
| __contains__ | 测试被调用的集合是否包含参数值 |
| __concat__ | 对于序列 a 和 b,返回 a + b |
| __defaults__ | 返回一个包含默认参数值的元组,对于那些有的参数,否则返回 None。 |
| __del__ | 当实例即将被销毁时被调用。 |
| __delattr__ | 删除一个属性 |
| __delete__ | 删除所有者类的一个实例上的属性。 |
| __delitem__ | 删除在第二个参数中定义的索引处的第一个参数的值。 |
| __delslice__ | 调用以实现对 self[i:j] 的删除。对i和j的注释与__getslice__()相同。这个方法已被废弃。 |
| __dict__ | 支持任意函数属性的命名空间。 |
| __dir__ | 在对象上调用 dir() 时被调用。 |
| __div__ | 除法运算符 (/) 是由这些方法实现的。当 __future__.division 生效时,使用 __truediv__() 方法,否则使用 __div__()。 |
| __divmod__ | 实现divmod()的内置方法。Python 内置的 divmod(a, b) 函数接收两个整数或浮点数 a 和 b 作为输入参数,并返回一个元组 (a // b, a % b)。 |
| 文件 | 函数的文档字符串,如果不可用,则为 None;不被子类继承。 |
| __enter__ | 输入与此对象相关的运行时环境。 |
| __eq__ | 丰富的比较:x==y 调用 x.__eq__(y) |
| __exit__ | 退出与此对象相关的运行时上下文。 |
| __float__ | 调用以实现内置函数 complex(), int() 和 float()。 |
| __floor__(x, y) | 实现 math.floor() 的行为,即四舍五入到最近的整数。 |
| __floordiv__ | 执行 a//b |
| __format__(self, specs) | 由 format() 内置函数调用,并扩展到格式化字符串字面的评估和 str.format() 方法,以产生一个对象的 "格式化 "字符串表示。 |
| __fspath__ | 返回路径参数的文件系统表示。 |
| __ge__ | 返回 x 大于或等于 y |
| __get__ | 调用以获得所有者类的属性(类属性访问)或该类的实例的属性(实例属性访问)。 |
| 调用获取所有者类(类属性访问)或该类的一个实例(实例属性访问)的属性。 | 当默认的属性访问失败,出现 AttributeError 时被调用。 |
| 调用__getattribute__。 | 无条件地调用,以实现对类的实例的属性访问。如果该类也定义了 __getattr__(),后者将不会被调用,除非 __getattribute__() 明确地调用它或引发 AttributeError。 |
| __getitem__ | 返回索引 b 处的 a 的值。 |
| __getslice__ | 调用以实现对 self[i:j] 的评估。返回的对象应该与 self 的类型相同。 |
| __globals__ | 对存放函数全局变量的字典的引用 - 定义函数的模块的全局命名空间。 |
| __gt__ | 返回 x 大于 y |
| __hash__(self) | 被内置函数 hash() 调用,并用于对散列集合成员的操作,包括 set, frozenset, 和 dict。__hash__() 应该返回一个整数。 |
| __hex__ | 被调用以实现内置函数hex()。应该返回一个字符串值。 |
| __iadd__ | a = iadd(a, b) 等于 a += b。 |
| __iand__ | a = iand(a, b) 等于 a &= b。 |
| __iconcat__ | a = iconcat(a, b) 等同于a和b序列的a += b。 |
| __idiv__ | a = idiv(a, b) 等同于 a /= b。 |
| __ifloordiv__ | a = ifloordiv(a, b) 相当于 a //= b。 |
| __ilshift__ | a = ilshift(a, b) 相当于 a <<= b。 |
| __imatmul__ | a = imatmul(a, b) 等同于 a @= b。 |
| __imod__ | a = imod(a, b) 相当于 a %= b。 |
| __import__ | 通过名字导入一个库。例如,要动态地导入 NumPy 库,你可以运行 __import__('numpy')。 |
| __imul__ | a = imul(a, b) 等于 a *= b。 |
| __index__(x) | 返回转换为整数的a。 |
| __init__(self, ...) | 在实例被创建后 (由 __new__() 创建),但在返回给调用者之前被调用。 |
| 在创建实例之后(通过 __new__()),但在返回给调用者之前调用。 | 每当包含类被子类化时,这个方法就会被调用,此时 cls 就是新的子类。 |
| __instancecheck__ | 如果实例应该被认为是类的(直接或间接)实例,则返回 true。如果定义了这个方法,则调用它来实现 isinstance(instance, class)。 |
| __int__ | 调用以实现内置函数 complex(), int() 和 float()。 |
| 返回 x 的位数倒数。 | 返回数字 obj 的位逆值。 |
| __ior__(x) | a = ior(a, b) 相当于 a |= b。 |
| __ipow__ | a = ipow(a, b) 等于 a **= b。 |
| __irshift__ | a = irshift(a, b) 等同于 a >= b。 |
| __isub__ | a = isub(a, b) 等同于 a -= b。 |
| __iter__ | 当一个容器需要一个迭代器的时候,这个方法被调用。这个方法应该返回一个新的迭代器对象,它可以遍历容器中所有的对象。 |
| __itruediv__ | a = itruediv(a, b) 相当于 a /= b。 |
| __ixor__ | a = ixor(a, b) 等于a ^= b。 |
| __kwdefaults__ | 一个包含仅有关键字的参数的默认值的 dict。 |
| __le__ | 如果 x 低于或等于 y,返回 true。 |
| __len__ | 被调用以实现内置函数 len()。应该返回对象的长度,一个 >= 0 的整数。另外,一个没有定义 __bool__() 方法的对象,其 __len__() 方法返回 0,在布尔语境中被认为是假的。 |
| __length_hint__ | 被调用以实现operator.length_hint()。应该返回一个对象的估计长度(可能大于或小于实际长度)。 |
| 返回 x 左移 y 的值。 | 返回x左移y的结果。 |
| __lt__(x, y) | 如果 x 小于 y,返回 true。 |
| 返回 a @ b。 | 返回 a @ b。 |
| 返回 a @ b。 | 由 dict.__getitem__() 调用,当 key 不在字典中时,为 dict 子类实现 self[key] 。 |
| __mod__(x, y) | 返回 x % y。 |
| __module__ | 该函数所定义的模块名称,如果不可用,则为 None。 |
| __mro__ | 这个属性是一个类的元组,在方法解析过程中寻找基类时,会考虑这些类。 |
__mul__ | 返回 a * b, 表示 a 和 b 的数字。 |
| __name__ | 该函数的名称。 |
| __ne__ | 丰富的比较:x! =y 和 x<>y 调用 x.__ne__(y) |
| __neg__ | 返回被否定的obj (-obj)。 |
| __new__(x) | 调用以创建一个新的类 cls 的实例。 |
| __next__ | 返回容器中的下一个项目。 |
| __nonzero__ | 调用以实现真值测试和内置操作 bool();应返回 False 或 True,或其整数等价物 0 或 1。 |
| __not__(x) | 返回 not x 的结果。 |
| __oct__ | 返回内置函数 oct() 的结果,计算一个整数的八进制表示。 |
| 返回一个整数的八进制表示法。 | 返回 a 和 b 的 bitwise or。 |
| __pos__ | 返回 obj 的正数 (+obj)。 |
| __pow__ | 返回 a ** b, 为 a 和 b 的数字。 |
| __qualname__ | 该函数的限定名称。 |
__radd__ | 被调用以实现二进制算术运算+,操作数被反射(互换)。只有当左边的操作数不支持相应的操作,并且操作数的类型不同时才调用。 |
| 读取操作数。 | 调用以实现二进制算术运算& (__and__),操作数为反射(交换)。只有当左边的操作数不支持相应的操作,并且操作数的类型不同时,才会调用。 |
| 呼叫 | 调用以实现二进制算术运算 / (__div__),操作数被反射(互换)。只有当左边的操作数不支持相应的运算,并且操作数的类型不同时,才调用。 |
| __rdivmod__ | 被调用以实现二进制算术运算divmod(),操作数被反射(交换)。只有当左边的操作数不支持相应的运算,并且操作数的类型不同时才调用。 |
| 减法(__reduce__) | __reduce__() 方法不需要参数,应返回一个字符串或最好是一个元组 (返回的对象通常被称为 "减少值")。如果返回一个字符串,这个字符串应该被解释为一个全局变量的名称。 |
| __reduce_ex__ | 另外,也可以定义一个 __reduce_ex__() 方法。唯一的区别是这个方法应该接受一个整数的参数,即协议版本。 |
| __repr__ | 由 repr() 内置函数调用,计算一个对象的 "官方 "字符串表示。 |
| __reversed__ | 由内置的 reversed() 函数调用(如果存在),以实现反向迭代。它应该返回一个新的迭代器对象,该迭代器以反向顺序遍历容器中的所有对象。 |
| __rfloordiv__ | 调用该函数以实现二进制算术运算 // (__floordiv__),操作数被反射(交换)了。只有当左边的操作数不支持相应的运算,并且操作数的类型不同时才调用。 |
| 调用以实现二进制运算。 | 调用以实现二进制算术运算<< (__lshift__),操作数为反射(交换)。只有当左边的操作数不支持相应的操作,并且操作数的类型不同时才调用。 |
| 调用以实现matmul__。 | 调用该函数来实现操作数为@ (__matmul__)的matmul运算,操作数为反射(交换)。只有当左边的操作数不支持相应的操作,并且操作数的类型不同时才调用。 |
| 调用 | 调用该函数实现二进制算术运算% (__mod__),操作数为反射(互换)。只有当左边的操作数不支持相应的运算,并且操作数的类型不同时,才会调用。 |
| 呼叫 | 被调用以实现二进制算术运算 * (__mul__),操作数被反射(交换)。只有当左边的操作数不支持相应的运算,并且操作数的类型不同时才调用。 |
| 呼叫 | 被调用以实现二进制算术运算 | (__or__),操作数被反射(交换)。只有当左边的操作数不支持相应的运算,并且操作数的类型不同时才调用。 |
| __round__ | 被调用以实现内置函数 round() 和数学函数 trunc(), floor() 和 ceil()。 |
| 调用实现内置函数 round() 和数学函数 trunc() and floor() ceil() 。 | 调用实现二进制算术运算 ** (__pow__),操作数被反射(交换)。只有当左边的操作数不支持相应的运算,并且操作数是不同的类型时才调用。 |
| __rrshift__ | 调用实现二进制算术运算 >> (__rshift__),操作数为反射(互换)。只有当左边的操作数不支持相应的操作,并且操作数的类型不同时才调用。 |
| __rshift__ | 返回 a 被 b 右移的结果,即 a >> b。 |
| __rsub__ | 调用以实现二进制算术运算 - (__sub__),操作数被反射(交换)。只有当左边的操作数不支持相应的运算,并且操作数是不同的类型时才调用。 |
| 寄存器__rtruediv__ | 被调用以实现二进制算术运算 / (__truediv__),操作数被反射(交换)。只有当左边的操作数不支持相应的操作,并且操作数的类型不同时才调用。 |
| 读取 | 调用以实现二进制算术运算^ (__xor__),操作数为反射(互换)。只有当左边的操作数不支持相应的操作,并且操作数的类型不同时,才会调用。 |
| 设置__ | 调用该函数将所有者类的一个实例上的属性设置为一个新的值,值。 |
| __set_name__ | 在创建所有者类的所有者时被调用。描述符已被分配给 name。 |
| __setattr__ | 在试图进行属性赋值时被调用。这个被调用,而不是正常的机制(即在实例字典中存储值)。 |
| __setitem__ | 将索引 b 处的 a 的值设置为 c。 |
| __setslice__ | 被调用以实现对self[i:j]的赋值。对i和j的注释与__getslice__()相同。 |
| __sizeof__ | 返回给定对象的内部大小,以字节为单位。 |
| __slots__ | 这个类变量可以被分配给一个字符串、可迭代的字符串或实例使用的变量名的字符串序列。__slots__ 为声明的变量保留空间,并防止为每个实例自动创建 __dict__ 和 __weakref__。 |
| __str__ | 被 str(object) 和内置函数 format() 和 print() 调用,计算一个对象的 "非正式 "或可打印的字符串表示。 |
| 子__ | 返回 a - b。 |
| __subclasscheck__ | 如果子类应该被认为是类的一个(直接或间接)子类,则返回 true。如果定义了,则调用它来实现 issubclass(subclass, class)。 |
| __subclasses__ | 返回一个给定的类的子类。 |
| 返回 a / b,其中 2/3 是指的 2/3。 | 返回 a / b,其中 2/3 是 .66 而不是 0。这也被称为 "真 "除法。 |
| __trunc__ | 调用以实现内置函数 round() 和数学函数 trunc(), floor() 和 ceil()。 |
| 调用内置函数 round() 和数学函数 trunc() and ceil() 实现。 | 调用以实现内置的 unicode() ;应返回一个 Unicode 对象。 |
| __xor__ | 返回 a 和 b 的位数排他性或。 |
表:带有解释的Dunder方法列表
要获得用于创建此表的来源列表,请向下滚动到文章的末尾。
Python Dunder 方法 - 每行一个方法
__abs__
__add__
__aenter__
__aexit__
__aiter__
__and__
__anext__
__await__
__bool__
__bytes__
__call__
__ceil__
__class__
__class_getitem__
__cmp__
__coerce__
__complex__
__contains__
__del__
__delattr__
__delete__
__delitem__
__delslice__
__dict__
__dir__
__div__
__divmod__
__enter__
__eq__
__exit__
__float__
__floor__
__floordiv__
__format__
__fspath__
__ge__
__get__
__getattr__
__getattribute__
__getitem__
__getnewargs__
__getslice__
__gt__
__hash__
__hex__
__iadd__
__iand__
__idiv__
__ifloordiv__
__ilshift__
__imatmul__
__imod__
__import__
__imul__
__index__
__init__
__init_subclass__
__instancecheck__
__int__
__invert__
__ior__
__ipow__
__irshift__
__isub__
__iter__
__itruediv__
__ixor__
__le__
__len__
__length_hint__
__long__
__lshift__
__lt__
__matmul__
__metaclass__
__missing__
__mod__
__mro__
__mul__
__ne__
__neg__
__new__
__next__
__nonzero__
__oct__
__or__
__pos__
__pow__
__prepare__
__radd__
__rand__
__rcmp__
__rdiv__
__rdivmod__
__reduce__
__reduce_ex__
__repr__
__reversed__
__rfloordiv__
__rlshift__
__rmatmul__
__rmod__
__rmul__
__ror__
__round__
__rpow__
__rrshift__
__rshift__
__rsub__
__rtruediv__
__rxor__
__set__
__set_name__
__setattr__
__setitem__
__setslice__
__sizeof__
__slots__
__str__
__sub__
__subclasscheck__
__subclasses__
__truediv__
__trunc__
__unicode__
__weakref__
__xor__
作为字符串列表的Python Dunder方法
如果你需要它们作为Python列表进行复制和粘贴,这里就是。
['__abs__', '__add__', '__aenter__', '__aexit__', '__aiter__', '__and__', '__anext__', '__await__', '__bool__', '__bytes__', '__call__', '__ceil__', '__class__', '__class_getitem__', '__cmp__', '__coerce__', '__complex__', '__contains__', '__del__', '__delattr__', '__delete__', '__delitem__', '__delslice__', '__dict__', '__dir__', '__div__', '__divmod__', '__enter__', '__eq__', '__exit__', '__float__', '__floor__', '__floordiv__', '__format__', '__fspath__', '__ge__', '__get__', '__getattr__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__hex__', '__iadd__', '__iand__', '__idiv__', '__ifloordiv__', '__ilshift__', '__imatmul__', '__imod__', '__import__', '__imul__', '__index__', '__init__', '__init_subclass__', '__instancecheck__', '__int__', '__invert__', '__ior__', '__ipow__', '__irshift__', '__isub__', '__iter__', '__itruediv__', '__ixor__', '__le__', '__len__', '__length_hint__', '__long__', '__lshift__', '__lt__', '__matmul__', '__metaclass__', '__missing__', '__mod__', '__mro__', '__mul__', '__ne__', '__neg__', '__new__', '__next__', '__nonzero__', '__oct__', '__or__', '__pos__', '__pow__', '__prepare__', '__radd__', '__rand__', '__rcmp__', '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rfloordiv__', '__rlshift__', '__rmatmul__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__set__', '__set_name__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__slots__', '__str__', '__sub__', '__subclasscheck__', '__subclasses__', '__truediv__', '__trunc__', '__unicode__', '__weakref__', '__xor__']