Python 中的魔术方法(也称为特殊方法或双重下划线方法)是那些其名称以双下划线 (__) 开头和结尾的方法。这些方法定义了类的行为,使你可以对类实例使用诸如算术运算、比较操作、上下文管理器等特性。下面是一些常见的魔术方法的例子:

对象创建与销毁

  • __new__(cls, ...): 控制对象的创建过程,在 __init__ 之前被调用。
  • __init__(self, ...): 初始化一个已经创建的对象。
  • __del__(self): 当一个对象被删除时调用。

表示形式

  • __repr__(self): 返回一个“官方”的字符串表示形式,通常用来调试。
  • __str__(self): 返回一个用户友好的字符串表示形式。

算术运算符

  • __add__(self, other): 定义加法运算。
  • __sub__(self, other): 定义减法运算。
  • __mul__(self, other): 定义乘法运算。
  • __truediv__(self, other): 定义真除法运算。
  • __floordiv__(self, other): 定义整数除法运算。
  • __mod__(self, other): 定义取模运算。
  • __pow__(self, other[, modulo]): 定义幂运算。
  • __neg__(self): 定义负号运算。
  • __pos__(self): 定义正号运算。
  • __abs__(self): 定义绝对值运算。

比较运算符

  • __eq__(self, other): 定义等于运算。
  • __ne__(self, other): 定义不等于运算。
  • __lt__(self, other): 定义小于运算。
  • __le__(self, other): 定义小于等于运算。
  • __gt__(self, other): 定义大于运算。
  • __ge__(self, other): 定义大于等于运算。

序列和迭代

  • __len__(self): 定义获取长度。
  • __getitem__(self, key): 定义通过索引获取元素。
  • __setitem__(self, key, value): 定义通过索引设置元素。
  • __delitem__(self, key): 定义通过索引删除元素。
  • __iter__(self): 返回一个迭代器对象。
  • __next__(self): 返回迭代中的下一个项目。

上下文管理协议(即 with 语句)

  • __enter__(self): 进入 with 语句时调用。
  • __exit__(self, exc_type, exc_val, exc_tb): 退出 with 语句时调用。

属性描述符

  • __getattr__(self, name): 获取不存在的属性时调用。
  • __setattr__(self, name, value): 设置属性时调用。
  • __delattr__(self, name): 删除属性时调用。

这些只是其中的一部分,实际上还有很多其他的魔术方法可以定义类的行为。使用这些方法可以使你的类更加 Pythonic,并且能够无缝地集成到 Python 语言的结构中。如果你需要了解某个特定魔术方法的具体用途或实现细节,请告诉我,我可以提供更详细的信息。