Python魔术方法有哪些_常见特殊方法说明

4次阅读

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

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-Stringformat() 的自定义格式化,例如 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(…)),适合实现可调用配置对象、装饰器类或缓存封装
text=ZqhQzanResources