1. Python构造与析构方法深度解析
在Python面向对象编程中,__new__、__init__和__del__这三个特殊方法构成了对象生命周期管理的核心机制。很多开发者对它们的执行顺序和职责边界存在误解——比如认为__new__只是__init__的变体,或者将__del__等同于其他语言中的析构函数。实际上,这三个方法分别对应着对象创建、初始化和销毁三个不同阶段,理解它们的差异对编写健壮的Python类至关重要。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. __new__方法:对象创建的幕后黑手
2.1 方法定义与基本用法
__new__是一个静态方法(虽然不需要显式声明),负责创建并返回类的实例。其标准定义形式为:
python复制def __new__(cls, *args, **kwargs):
return super().__new__(cls)
这里的cls参数表示当前正在实例化的类。与常见误解不同,__new__才是真正"构造"对象的方法,而__init__只是对已创建对象进行初始化。
2.2 典型应用场景
- 单例模式实现:通过控制实例创建次数确保全局唯一性
python复制class Singleton:
_instance = None
def __new__(cls):
if not cls._instance:
cls._instance = super().__new__(cls)
return cls._instance
- 不可变类型子类化:当继承
str、tuple等不可变类型时,必须在__new__中修改值
python复制class UpperStr(str):
def __new__(cls, value):
return super().__new__(cls, value.upper())
关键提示:
__new__必须返回有效的对象实例,否则不会触发__init__。如果返回其他类的实例,则不会调用当前类的__init__
