云南网站建设,企业信息化软件定制开发

专业提供昆明网站建设, 昆明软件开发, 云南网站建设,企业信息化软件定制开发服务免费咨询QQ932256355

博客园 首页 新随笔 联系 订阅 管理

100 个 Python 特殊方法按照不同类别进行的分类整理

以下是将上述 100 个 Python 特殊方法按照不同类别进行的分类整理:

一、对象创建与初始化

  1. __new__:用于创建对象实例,在 __init__ 之前调用,常用于实现单例模式等特殊的实例创建逻辑。
  2. __init__:对象初始化方法,在对象创建后调用,用于设置对象的初始属性。
  3. __init_subclass__:在子类创建时被调用,可用于对所有子类进行统一的配置和管理。
  4. 元类的 __init__:在类创建后被调用,可用于对类进行初始化配置,如设置类的默认属性、绑定类方法等。

二、对象销毁与资源管理

  1. __del__:对象销毁时调用,用于释放对象占用的资源,但不保证一定会被调用。
  2. __enter____exit__:用于实现上下文管理器,在 with 语句块进入和退出时分别调用,可用于资源的获取和释放,如文件操作、数据库连接等。
  3. __aenter____aexit__:异步上下文管理器的特殊方法,用于异步资源的管理,如异步文件操作、异步网络连接等。
  4. __aclose__:用于异步地关闭资源,在异步迭代器、异步上下文管理器等场景中,当资源不再需要时进行优雅的关闭操作。

三、属性访问与描述符

  1. __getattr__:当访问对象不存在的属性时调用,可用于实现动态属性或属性的默认值。
  2. __setattr__:在设置对象属性时调用,可用于对属性赋值进行拦截和验证。
  3. __delattr__:在删除对象属性时调用,可用于实现属性删除的自定义逻辑。
  4. __getattribute__:在访问对象任何属性时都会调用,比 __getattr__ 更优先,需谨慎使用以避免无限递归。
  5. 描述符相关
    • __get__:描述符协议方法,用于获取描述符管理的属性值。
    • __set__:用于设置描述符管理的属性值。
    • __delete__:用于删除描述符管理的属性时的逻辑处理。
    • __set_name__:Python 3.6 及以上版本新增,描述符被赋值给类的属性时调用,可获取所属类和属性名。

四、比较与排序

  1. __lt__:实现小于比较(<)。
  2. __le__:实现小于等于比较(<=)。
  3. __eq__:实现等于比较(==)。
  4. __ne__:实现不等于比较(!=)。
  5. __gt__:实现大于比较(>)。
  6. __ge__:实现大于等于比较(>=)。
  7. __cmp__(Python 2)**:Python 2 中用于比较两个对象,返回一个整数表示大小关系,Python 3 中可通过 functools.total_ordering 装饰器结合 __lt____eq__ 替代。

五、容器与序列操作

  1. 容器协议
    • __len__:返回容器的长度,用于支持 len() 函数。
    • __getitem__:实现通过索引或键访问容器元素,支持 [] 操作。
    • __setitem__:实现通过索引或键设置容器元素,支持 [] 赋值操作。
    • __delitem__:实现通过索引或键删除容器元素,支持 del 操作。
    • __contains__:实现 in 运算符的逻辑,用于判断元素是否在容器中。
  2. 序列操作
    • __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 处理切片):实现切片删除操作。

六、映射操作

  1. __missing__:在自定义映射类型中,当访问不存在的键时调用,可用于实现默认值设置、缓存更新等逻辑。
  2. __setdefault__:用于在映射中查找键,如果键不存在则设置默认值并返回,可重写实现自定义逻辑。
  3. __popitem__:移除并返回映射中的任意键值对。
  4. __update__:用于更新映射,可重写以实现自定义的更新逻辑。

七、数字运算

  1. 算术运算
    • __add____radd__:实现加法运算(+),__radd__ 处理反向加法。
    • __sub____rsub__:实现减法运算(-),__rsub__ 处理反向减法。
    • __mul____rmul__:实现乘法运算(*),__rmul__ 处理反向乘法。
    • __truediv__:实现真除法运算(/)。
    • __floordiv__:实现整除运算(//)。
    • __mod____rmod__:实现取模运算(%),__rmod__ 处理反向取模。
    • __pow____rpow__:实现幂运算(**),__rpow__ 处理反向幂运算。
  2. 位运算
    • __lshift__:实现左移位运算(<<)。
    • __rshift__:实现右移位运算(>>)。
    • __and____rand__:实现按位与运算(&),__rand__ 处理反向按位与。
    • __or____ror__:实现按位或运算(|),__ror__ 处理反向按位或。
    • __xor____rxor__:实现按位异或运算(^),__rxor__ 处理反向按位异或。
    • __invert__:实现按位取反运算(~)。
  3. 就地运算
    • __iadd__:实现就地加法运算(+=)。
    • __isub__:实现就地减法运算(-=)。
    • __imul__:实现就地乘法运算(*=)。
    • __itruediv__:实现就地真除法运算(/=)。
    • __ifloordiv__:实现就地整除运算(//=)。
    • __imod__:实现就地取模运算(%=)。
    • __ipow__:实现就地幂运算(**=)。
    • __ilshift__:实现就地左移位运算(<<=)。
    • __irshift__:实现就地右移位运算(>>=)。
    • __iand__:实现就地按位与运算(&=)。
    • __ior__:实现就地按位或运算(|=)。
    • __ixor__:实现就地按位异或运算(^=)。

八、迭代器与生成器

  1. __aiter____anext__:用于实现异步迭代器,可用于异步文件读取、异步分页数据处理等异步场景。
  2. 生成器相关:生成器函数本身是一种特殊的迭代器,通过 yield 关键字实现。虽然没有特定的特殊方法与之严格对应,但与迭代器协议紧密相关。

九、字符串表示

  1. __str__:返回对象的字符串表示,用于 str() 函数和 print() 函数的默认输出。
  2. __repr__:返回对象的官方字符串表示,通常用于调试和开发环境,可通过 repr() 函数调用。
  3. __format__:自定义对象的格式化输出,配合 format() 函数或 f-string 使用。

十、异步编程

  1. __await__:用于将对象转换为可等待对象,可用于实现协程和异步任务的调度。
  2. 异步锁相关:在异步编程中,虽然没有特定的特殊方法名,但涉及到 asyncio.Lock 等异步锁的使用,结合 __aenter____aexit__ 方法实现异步资源的并发控制。

十一、元类相关

  1. __prepare__:元类的方法,返回一个命名空间对象,可用于设置类属性的默认值、应用类装饰器等,在类创建之前进行准备工作。
  2. __new__(元类):在类创建时调用,可用于控制类的创建过程,如修改类的属性、基类等。
  3. __call__(元类):在实例化类时调用,可用于实现单例模式、实例化钩子和拦截等功能。
  4. __instancecheck__:控制 isinstance() 函数的行为,可自定义实例检查逻辑。
  5. __subclasscheck__:控制 issubclass() 函数的行为,可自定义子类检查逻辑。

十二、模块相关

  1. __all__:模块级别的属性,用于控制 from module import * 语句导入的内容,可动态更新以实现不同的导入策略。
  2. __loader__:模块的属性,可指向一个自定义的模块加载器,用于从不同的数据源加载模块或对模块进行预处理。
  3. __dir__:模块级别的方法,用于返回模块的属性列表,可自定义模块属性的可见性。
posted on 2025-03-03 15:10  TekinTian  阅读(25)  评论(0)    收藏  举报