当前位置:首页>python>从零开始学python-内置类的专有方法

从零开始学python-内置类的专有方法

  • 2026-09-08 17:44:22
从零开始学python-内置类的专有方法

Hi~新朋友,记得点上面蓝字(网虫root)关注哟~

前言:

   在Python中,除了之前说的私有属性和私有方法(以双下划线开头,由开发者自定义)之外,还有许多内置的专有方法,通常被称为魔术方法(Magic Methods)或特殊方法(Special Methods)。这些方法以双下划线开头和结尾(例如 __init__、__str__),用于实现类的特定行为,如对象初始化、运算符重载、上下文管理等。

一些常用的内置专有方法

1. 对象生命周期

  • __new__(cls[, ...]):在 __init__ 之前调用,用于创建并返回一个新的实例。通常用于控制实例的创建过程(如单例模式)。

  • __init__(self[, ...]):构造函数,在实例创建后调用,用于初始化对象。

  • __del__(self):析构函数,在对象被垃圾回收时调用。

2. 字符串表示

  • __str__(self):定义当使用 str(obj) 或 print(obj) 时的输出。

  • __repr__(self):定义当使用 repr(obj) 或直接在交互式环境中显示对象时的输出,通常应返回一个有效的Python表达式字符串。

3. 容器和序列

  • __len__(self):定义当使用 len(obj) 时的行为,应返回容器的长度。

  • __getitem__(self, key):定义获取元素的行为,如 obj[key]。

  • __setitem__(self, key, value):定义设置元素的行为,如 obj[key] = value。

  • __delitem__(self, key):定义删除元素的行为,如 del obj[key]。

  • __contains__(self, item):定义 in 操作符的行为。

  • __iter__(self):定义迭代器,返回一个迭代器对象。

  • __next__(self):定义迭代器的下一个元素。

4. 属性访问

  • __getattr__(self, name):当访问一个不存在的属性时调用。

  • __setattr__(self, name, value):当设置任何属性时调用。

  • __delattr__(self, name):当删除属性时调用。

  • __getattribute__(self, name):当访问任何属性(无论是否存在)时无条件调用(比 __getattr__ 更底层)。

  • __dir__(self):定义当使用 dir(obj) 时的行为。

5. 运算符重载

  • 比较运算符:__eq__ (==), __ne__ (!=), __lt__ (<), __le__ (<=), __gt__ (>), __ge__ (>=)

  • 算术运算符:__add__ (+), __sub__ (-), __mul__ (*), __truediv__ (/), __floordiv__ (//), __mod__ (%), __pow__ (**), __neg__ (一元负号), __pos__ (一元正号) 等。

  • 位运算符:__and__ (&), __or__ (|), __xor__ (^), __invert__ (~), __lshift__ (<<), __rshift__ (>>)

  • 反射运算符(如 __radd__ 用于当左操作数不支持 __add__ 时调用)

  • 增量赋值运算符(如 __iadd__ 对应 +=)

6. 可调用对象

  • __call__(self[, ...]):允许实例像函数一样被调用,即 obj()

7. 上下文管理器

  • __enter__(self):进入上下文时调用(with 语句块开始时),返回值赋给 as 后的变量

  • __exit__(self, exc_type, exc_val, exc_tb):退出上下文时调用,用于清理资源。

8. 数值类型转换

  • __int__(self)、__float__(self)、__complex__(self):分别定义 int(obj)、float(obj)、complex(obj) 的行为。

  • __bool__(self):定义 bool(obj) 的行为,决定对象在布尔上下文中的真值。

9. 描述符

  • __get__(self, instance, owner):定义描述符的取值行为。

  • __set__(self, instance, value):定义描述符的赋值行为。

  • __delete__(self, instance):定义描述符的删除行为。

10. 其他常用

  • __hash__(self):定义 hash(obj) 的行为,用于字典键和集合成员。

  • __format__(self, format_spec):定义当使用 format(obj, format_spec) 时的行为。

  • __slots__:用于限制实例可以拥有的属性,节省内存。

11. 魔术方法与私有方法的区别

  • 私有方法:由开发者定义,以双下划线开头(不以双下划线结尾),用于隐藏内部实现,触发名称修饰。

  • 魔术方法:Python内置的特殊方法,以双下划线开头和结尾,名称固定,用于实现语言内部的行为,不应随意重命名或滥用。

例如,__init__ 是魔术方法,而 __my_private 是私有方法(但通常更推荐使用单下划线表示保护成员)。

【微语】春风得意马蹄疾,最是人间奋进时。愿你历经风雨,依然龙马精神,奔赴心中那片海。

网虫root

期待你的

分享

点赞

在看

最新文章

随机文章