Python 特殊方法与特殊属性详解
一、特殊方法(双下划线方法)
特殊方法(又称“魔法方法”)是 Python 类中以双下划线(__)包裹的方法,由解释器自动调用,用于定义类的核心行为。以下是常见类别及示例:
1. 对象生命周期管理
__new__:类方法,控制对象创建(返回实例),常用于单例模式或定制实例创建逻辑。
示例:
class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance__init__:实例初始化方法,创建实例时自动调用,用于设置属性。
__del__:对象销毁前调用(不建议依赖,垃圾回收时机不确定)。
2. 字符串表示
__str__:定义 print(obj) 或 str(obj) 的输出,侧重可读性。
__repr__:定义 repr(obj) 的输出,侧重调试(应能通过 eval() 重建实例)。
3. 运算符重载
__add__/__sub__:重载 +/- 运算符,实现自定义对象的数值运算。
示例:
class Vector:
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
__eq__/__lt__:重载 ==/< 等比较运算符。
4. 容器行为模拟
__len__:定义 len(obj) 的返回值,用于模拟容器长度。
__getitem__/__setitem__:实现 obj[key] 索引访问和赋值。
__iter__/__next__:支持 for 循环迭代(需返回迭代器)。
5. 上下文管理
__enter__/__exit__:实现 with 语句支持,自动处理资源(如文件关闭)。
示例:
class FileHandler:
def __enter__(self):
self.file = open("test.txt", "w")
return self.file
def __exit__(self, exc_type, exc_val, exc_tb):
self.file.close()
二、特殊属性
特殊属性用于访问对象的元信息,常见如下:
__name__:获取函数、类或模块的名称(字符串)。
示例:print(Vector.__name__)→Vector。__doc__:获取对象的文档字符串("""注释内容""")。__class__:返回对象所属的类(如obj.__class__→<class '__main__.Vector'>)。__dict__:返回对象的属性字典(包含实例变量)。
三、核心总结
| 类别 | 代表方法/属性 | 核心作用 |
|---|---|---|
| 生命周期 | __new__/__init__ | 控制对象创建与初始化 |
| 字符串表示 | __str__/__repr__ | 定义打印和调试格式 |
| 运算符重载 | __add__/__eq__ | 自定义对象的运算规则 |
| 容器行为 | __len__/__getitem__ | 模拟列表/字典等容器操作 |
| 元信息属性 | __name__/__doc__ | 访问对象的名称和文档 |
特殊方法和属性是 Python 灵活性的核心,通过实现它们,自定义对象可以像内置类型一样支持运算、迭代、上下文管理等功能,大幅提升代码的简洁性和可扩展性。