当前位置: 首页 > news >正文

Python 魔术方法功能分类指南

一、对象生命周期管理

1. 对象创建与初始化

  • ​**__new__(cls)**
    触发场景:实例化对象时第一个执行的方法
    功能:控制内存分配,常用于单例模式或资源预检查

  • ​**__init__(self)**
    触发场景:对象创建后初始化属性
    功能:设置对象初始状态(如成员变量赋值)

  • ​**__del__(self)**
    触发场景:对象引用计数归零或程序终止时
    功能:资源回收(慎用,建议使用上下文管理器替代)

方法名触发场景功能描述入参注意事项
__new__实例化对象时控制内存分配与实例创建cls+构造参数必须返回实例对象,常用于单例模式设计
__init__对象初始化阶段设置初始属性值self+构造参数__new__之后执行,不能返回非None值
__del__对象引用计数归零时资源回收处理self执行时机不可靠,建议优先使用上下文管理器

二、对象表示与字符串转换

1. 用户友好显示

  • ​**__str__(self)**
    触发场景:调用 print(obj)str(obj)
    功能:返回可读性强的字符串,面向终端用户

2. 开发调试显示

  • ​**__repr__(self)**
    触发场景:交互式环境直接输出对象或调用 repr(obj)
    功能:返回精确的表达式字符串,用于重建对象
方法名触发场景功能描述返回值要求注意事项
__str__print(obj)str()调用生成用户友好显示内容字符串优先于__repr__执行,适用于终端输出
__repr__repr(obj)或交互式环境显示生成开发者调试信息可执行表达式字符串应满足eval(repr(obj)) == obj原则

三、运算符重载

1. 算术运算

  • ​**__add__(self, other)**:+ 运算
  • ​**__sub__(self, other)**:- 运算
  • ​**__mul__(self, other)**:* 运算
方法名对应运算符触发场景参数要求注意事项
__add__+加法操作self, other需同时实现反向运算__radd__
__sub__-减法操作self, other需处理非数值类型操作数异常

2. 比较运算

  • ​**__eq__(self, other)**:== 判断
  • ​**__lt__(self, other)**:< 判断
  • ​**__ge__(self, other)**:>= 判断
方法名对应运算符触发场景返回值要求注意事项
__eq__==相等性判断布尔值需同时实现__hash__保证哈希一致性
__lt__<小于比较布尔值建议实现全部比较运算符保证逻辑完整性

3. 增量赋值

  • ​**__iadd__(self, other)**:+= 运算
  • ​**__isub__(self, other)**:-= 运算

四、容器协议支持

1. 基础操作

  • ​**__len__(self)**
    触发场景:调用 len(obj)
    功能:返回容器元素数量

  • ​**__getitem__(self, key)**
    触发场景obj[key] 索引访问
    功能:支持切片/字典键访问等操作

  • ​**__setitem__(self, key, value)**
    触发场景obj[key] = value 赋值操作

方法名触发场景功能描述参数要求注意事项
__len__len(obj)调用返回容器元素数量self必须返回非负整数
__getitem__obj[key]操作获取指定索引元素self, key需处理KeyError异常
__iter__for...in循环返回迭代器对象self需配合__next__实现完整迭代协议

2. 高级容器行为

  • ​**__contains__(self, item)**
    触发场景item in obj 成员关系判断

  • ​**__reversed__(self)**
    触发场景:调用 reversed(obj)
    功能:自定义反向迭代逻辑


五、属性动态管理

1. 访问控制

  • ​**__getattr__(self, name)**
    触发场景:访问不存在的属性时触发

  • ​**__setattr__(self, name, value)**
    触发场景:设置任何属性值时触发

  • ​**__getattribute__(self, name)**
    触发场景:所有属性访问均触发(需避免递归调用)

  • ​**__delattr__(self, name)**
    触发场景:删除属性时触发

方法名触发场景功能描述参数要求注意事项
__getattr__访问不存在的属性时动态属性处理self, name需与__getattribute__区分执行优先级
__setattr__设置任何属性时属性赋值拦截self, name, value需调用object.__setattr__防止递归调用

六、可调用对象

  • ​**__call__(self, *args)**
    触发场景:将实例作为函数调用(如 obj()
    功能:实现装饰器类或函数式对象

七、上下文管理

  • ​**__enter__(self)**
    触发场景:进入 with 语句块时
    功能:返回上下文资源(如打开文件对象)

  • ​**__exit__(self, exc_type, exc_val, traceback)**
    触发场景:退出 with 语句块时
    功能:处理异常与资源释放

方法名触发场景功能描述参数要求注意事项
__enter__进入with语句块时返回上下文资源对象self通常与资源获取操作配合使用
__exit__退出with语句块时处理异常与资源释放self, exc_type, exc_val, traceback需返回布尔值控制异常传播

八、反射与类型检查

  • ​**__instancecheck__(self, instance)**
    触发场景:调用 isinstance(obj, cls)
    功能:自定义实例类型检查逻辑

  • ​**__subclasscheck__(self, subclass)**
    触发场景:调用 issubclass(subcls, cls)
    功能:控制子类判断逻辑

方法名触发场景功能描述返回值要求注意事项
__instancecheck__isinstance()调用自定义实例类型判断布尔值需在元类中实现
__subclasscheck__issubclass()调用自定义子类关系判断布尔值需在元类中重写

九、协程与异步支持

  • ​**__await__(self)**
    触发场景:在协程中使用 await obj
    功能:生成协程对象

  • ​**__aiter__(self)** 与 ​**__anext__(self)**
    触发场景:异步迭代时调用
    功能:实现异步迭代器协议

方法名触发场景功能描述参数要求注意事项
__await__await obj调用生成协程对象self需返回生成器对象
__aiter__异步迭代开始时返回异步迭代器self需配合__anext__实现完整协议

十、数学运算扩展

  • ​**__abs__(self)**:abs(obj) 调用时触发
  • ​**__round__(self, n)**:round(obj, n) 调用时触发
  • ​**__int__(self)**:int(obj) 类型转换时触发
方法名触发场景功能描述返回值要求注意事项
__abs__abs(obj)调用返回绝对值数值需保持数学运算一致性
__int__int(obj)调用类型转换为整型整数应实现配套的__float__方法

相关文章:

  • 十一、JavaScript简单数据类型和复杂数据类型
  • 材料科学基础:空间群与点群(1)
  • flutter 获取设备的唯一标识
  • 数仓开发那些事(11)
  • chrome-driver安装
  • 【商城实战(77)】商城智能客服系统搭建指南:选型与集成全攻略
  • 大模型有哪些算法
  • 注释容易混淆?修改vscode注释颜色,自定义你的专属颜色
  • Spring Cloud Kubernetes :云原生与容器化部署实战
  • SpringMVC实战——转发和重定向及实际场景
  • Linux中磁盘的管理
  • 对人工智能祛魅了
  • resetForm() 方法用于重置表单
  • 信息隐藏技术
  • Web Services 简介
  • 智能粉尘监测解决方案|守护工业安全,杜绝爆炸隐患
  • 什么是 JavaScript 中的 this 关键字?
  • VS2022 Qt 项目使用数据库报错问题
  • python(26) : 文件上传及下载和预览
  • Spring容器从启动到关闭的注解使用顺序及说明
  • 建网站业务如何开展/益阳网站seo
  • 南阳做网站电话/大连seo网站推广
  • 有源码就可以自己做H5网站吗/怎样推广产品
  • 漳州做网站多少钱/云优化
  • 广东省住房和城乡建设厅网站首页/外贸互联网推广的
  • 网站中二级导航栏怎么做/在线资源搜索神器