术语“dunder”是对方法名称前后各带有两个下划线的简称。 它们的独特性体现在多个方面:

内置属性:每个 Python 对象都根据其类型内置了一组特定的 dunder 方法。

隐式激活:许多 dunder 方法通过与 Python 的内置运算符或函数进行交互而自动被触发。举例来说,当使用==运算符比较两个对象时,实际上是调用了它们的__eq__方法。

可自定义:你可以覆盖已有的 dunder 方法,或为你的类定义新的 dunder 方法,从而赋予它们自定义的行为,同时保持其隐式调用的特性。

对于多数 Python 开发者而言,他们最先接触的双下划线方法往往是构造函数__init__。在创建类的新实例时,此方法会自动被调用,而使用常见的语法MyClass(args, **kwargs)则是显式调用MyClass.init(args, **kwargs)的简便形式。

尽管__init__方法极为常用,但它只是 dunder 方法家族中较为专门的一个成员。它未能充分展现 dunder 方法的灵活性和强大功能,这些方法能让你重新定义对象与 Python 原生功能的交互方式。