python魔术方法是类中以双下划线开头和结尾的特殊方法,由解释器在特定操作时自动调用,用于定制对象的生命周期、字符串表示、比较逻辑、运算符行为及容器协议等功能。

Python魔术方法(也叫特殊方法或双下划线方法)是类中以双下划线开头和结尾的方法,比如 __init__、__str__。它们不是用来直接调用的,而是由Python解释器在特定操作(如创建对象、打印、加法运算等)时自动触发,用于定制类的行为。
对象生命周期相关方法
这类方法控制对象的创建、初始化和销毁过程:
- __new__(cls, ...):负责创建并返回一个新实例,在 __init__ 之前调用;常用于单例、不可变类型或自定义对象构造逻辑。
- __init__(self, ...):初始化已创建的对象,不返回值;绝大多数类都会重写它来设置初始状态。
- __del__(self):对象被垃圾回收前调用,用于清理资源(如关闭文件、断开连接);注意:不保证何时执行,也不建议依赖它做关键清理。
字符串与显示相关方法
影响对象如何被转换为字符串,以及在交互式环境或调试中如何呈现:
- __str__(self):返回用户友好的字符串表示,str(obj) 或 print(obj) 会调用它。
- __repr__(self):返回开发者友好的、尽可能精确的字符串表示,理想情况下能用于重建对象(如 eval(repr(obj)) == obj);repr(obj) 和交互式命令行输出默认使用它。
- __format__(self, format_spec):支持 f-string 和 format() 的自定义格式化,例如 f"{obj:.2f}" 会触发它。
比较与布尔转换方法
让自定义对象支持比较运算符和真假值判断:
立即学习“Python免费学习笔记(深入)”;
- __eq__(self, other)、__lt__(self, other)、__le__、__gt__、__ge__、__ne__:分别对应 ==、、 等;建议成对实现(如实现 __eq__ 就别忘了 __hash__ 是否要同步)。
- __bool__(self):决定 bool(obj) 的返回值;若未定义,则 fallback 到 __len__;返回 False 表示“空”或“无效”状态(如空容器、未初始化对象)。
- __len__(self):返回长度,len(obj) 调用它;注意返回值必须是非负整数。
运算符重载与容器行为方法
使对象支持常见运算符和容器协议:
- __add__(self, other)、__sub__、__mul__、__truediv__ 等:对应 +、-、*、/ 运算;支持反向运算可补充 __radd__ 等(当左操作数不支持该运算时触发)。
- __getitem__(self, key)、__setitem__(self, key, value)、__delitem__(self, key):让对象支持索引(obj[key])、赋值(obj[key] = v)和删除(del obj[key]),常用于自定义序列或映射类型。
- __iter__(self) 和 __next__(self):支持 for 循环和迭代器协议;也可只实现 __iter__ 返回一个迭代器对象。
- __call__(self, ...):让实例像函数一样被调用(obj(...)),适合实现可调用配置对象、装饰器类或缓存封装。










