100 个 Python 特殊方法按照不同类别进行的分类整理
以下是将上述 100 个 Python 特殊方法按照不同类别进行的分类整理:
一、对象创建与初始化
__new__:用于创建对象实例,在__init__之前调用,常用于实现单例模式等特殊的实例创建逻辑。__init__:对象初始化方法,在对象创建后调用,用于设置对象的初始属性。__init_subclass__:在子类创建时被调用,可用于对所有子类进行统一的配置和管理。- 元类的
__init__:在类创建后被调用,可用于对类进行初始化配置,如设置类的默认属性、绑定类方法等。
二、对象销毁与资源管理
__del__:对象销毁时调用,用于释放对象占用的资源,但不保证一定会被调用。__enter__和__exit__:用于实现上下文管理器,在with语句块进入和退出时分别调用,可用于资源的获取和释放,如文件操作、数据库连接等。__aenter__和__aexit__:异步上下文管理器的特殊方法,用于异步资源的管理,如异步文件操作、异步网络连接等。__aclose__:用于异步地关闭资源,在异步迭代器、异步上下文管理器等场景中,当资源不再需要时进行优雅的关闭操作。
三、属性访问与描述符
__getattr__:当访问对象不存在的属性时调用,可用于实现动态属性或属性的默认值。__setattr__:在设置对象属性时调用,可用于对属性赋值进行拦截和验证。__delattr__:在删除对象属性时调用,可用于实现属性删除的自定义逻辑。__getattribute__:在访问对象任何属性时都会调用,比__getattr__更优先,需谨慎使用以避免无限递归。- 描述符相关
__get__:描述符协议方法,用于获取描述符管理的属性值。__set__:用于设置描述符管理的属性值。__delete__:用于删除描述符管理的属性时的逻辑处理。__set_name__:Python 3.6 及以上版本新增,描述符被赋值给类的属性时调用,可获取所属类和属性名。
四、比较与排序
__lt__:实现小于比较(<)。__le__:实现小于等于比较(<=)。__eq__:实现等于比较(==)。__ne__:实现不等于比较(!=)。__gt__:实现大于比较(>)。__ge__:实现大于等于比较(>=)。__cmp__(Python 2)**:Python 2 中用于比较两个对象,返回一个整数表示大小关系,Python 3 中可通过functools.total_ordering装饰器结合__lt__和__eq__替代。
五、容器与序列操作
- 容器协议
__len__:返回容器的长度,用于支持len()函数。__getitem__:实现通过索引或键访问容器元素,支持[]操作。__setitem__:实现通过索引或键设置容器元素,支持[]赋值操作。__delitem__:实现通过索引或键删除容器元素,支持del操作。__contains__:实现in运算符的逻辑,用于判断元素是否在容器中。
- 序列操作
__iter__:返回一个迭代器对象,使对象可用于for循环等迭代操作。__next__:迭代器的核心方法,用于返回迭代的下一个元素,当没有更多元素时抛出StopIteration异常。__reversed__:实现反转容器元素的顺序,支持reversed()函数。__add__和__radd__:实现容器的拼接操作(+),__radd__处理反向拼接。__mul__和__rmul__:实现容器与整数的乘法操作(*),用于重复容器元素,__rmul__处理反向乘法。__iadd__:实现就地拼接操作(+=)。__imul__:实现就地乘法操作(*=)。__setslice__(Python 2)和__setitem__(Python 3 处理切片):实现切片赋值操作。__delslice__(Python 2)和__delitem__(Python 3 处理切片):实现切片删除操作。
六、映射操作
__missing__:在自定义映射类型中,当访问不存在的键时调用,可用于实现默认值设置、缓存更新等逻辑。__setdefault__:用于在映射中查找键,如果键不存在则设置默认值并返回,可重写实现自定义逻辑。__popitem__:移除并返回映射中的任意键值对。__update__:用于更新映射,可重写以实现自定义的更新逻辑。
七、数字运算
- 算术运算
__add__和__radd__:实现加法运算(+),__radd__处理反向加法。__sub__和__rsub__:实现减法运算(-),__rsub__处理反向减法。__mul__和__rmul__:实现乘法运算(*),__rmul__处理反向乘法。__truediv__:实现真除法运算(/)。__floordiv__:实现整除运算(//)。__mod__和__rmod__:实现取模运算(%),__rmod__处理反向取模。__pow__和__rpow__:实现幂运算(**),__rpow__处理反向幂运算。
- 位运算
__lshift__:实现左移位运算(<<)。__rshift__:实现右移位运算(>>)。__and__和__rand__:实现按位与运算(&),__rand__处理反向按位与。__or__和__ror__:实现按位或运算(|),__ror__处理反向按位或。__xor__和__rxor__:实现按位异或运算(^),__rxor__处理反向按位异或。__invert__:实现按位取反运算(~)。
- 就地运算
__iadd__:实现就地加法运算(+=)。__isub__:实现就地减法运算(-=)。__imul__:实现就地乘法运算(*=)。__itruediv__:实现就地真除法运算(/=)。__ifloordiv__:实现就地整除运算(//=)。__imod__:实现就地取模运算(%=)。__ipow__:实现就地幂运算(**=)。__ilshift__:实现就地左移位运算(<<=)。__irshift__:实现就地右移位运算(>>=)。__iand__:实现就地按位与运算(&=)。__ior__:实现就地按位或运算(|=)。__ixor__:实现就地按位异或运算(^=)。
八、迭代器与生成器
__aiter__和__anext__:用于实现异步迭代器,可用于异步文件读取、异步分页数据处理等异步场景。- 生成器相关:生成器函数本身是一种特殊的迭代器,通过
yield关键字实现。虽然没有特定的特殊方法与之严格对应,但与迭代器协议紧密相关。
九、字符串表示
__str__:返回对象的字符串表示,用于str()函数和print()函数的默认输出。__repr__:返回对象的官方字符串表示,通常用于调试和开发环境,可通过repr()函数调用。__format__:自定义对象的格式化输出,配合format()函数或f-string使用。
十、异步编程
__await__:用于将对象转换为可等待对象,可用于实现协程和异步任务的调度。- 异步锁相关:在异步编程中,虽然没有特定的特殊方法名,但涉及到
asyncio.Lock等异步锁的使用,结合__aenter__和__aexit__方法实现异步资源的并发控制。
十一、元类相关
__prepare__:元类的方法,返回一个命名空间对象,可用于设置类属性的默认值、应用类装饰器等,在类创建之前进行准备工作。__new__(元类):在类创建时调用,可用于控制类的创建过程,如修改类的属性、基类等。__call__(元类):在实例化类时调用,可用于实现单例模式、实例化钩子和拦截等功能。__instancecheck__:控制isinstance()函数的行为,可自定义实例检查逻辑。__subclasscheck__:控制issubclass()函数的行为,可自定义子类检查逻辑。
十二、模块相关
__all__:模块级别的属性,用于控制from module import *语句导入的内容,可动态更新以实现不同的导入策略。__loader__:模块的属性,可指向一个自定义的模块加载器,用于从不同的数据源加载模块或对模块进行预处理。__dir__:模块级别的方法,用于返回模块的属性列表,可自定义模块属性的可见性。
浙公网安备 33010602011771号