You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建对象和初始化对象有什么区别?关联__new__与__init__方法解析

__new__与__init__的区别及对象初始化含义

二者的核心区别

  • 执行顺序与定位不同
    __new__是类层面的方法,优先于__init__执行,作用是创建并返回一个未被赋值的空类实例,第一个固定参数为类本身cls。如果重写__new__时没有返回当前类的实例,后续__init__方法会直接跳过不执行。
    __init__是实例层面的方法,作用是对已经生成的空实例做属性配置、初始逻辑执行,第一个固定参数为__new__返回的实例self,无返回值要求。

  • 适用场景不同
    日常开发中99%的场景只需要重写__init__完成实例初始化即可,只有需要自定义实例生成逻辑时才需要重写__new__,比如实现单例模式、自定义继承自不可变类型(int/str/元组等)的类逻辑。

我们可以通过一段简单的代码直观感知二者的差异:

class Demo:
    def __new__(cls, value):
        print("1. 执行__new__,生成空实例")
        empty_instance = super().__new__(cls)
        print(f"空实例内存地址: {id(empty_instance)}")
        return empty_instance
    
    def __init__(self, value):
        print("2. 执行__init__,给实例赋值属性")
        print(f"当前操作的实例内存地址: {id(self)}")
        self.value = value

obj = Demo(10)

运行后会发现两个方法操作的实例内存地址完全一致,只是执行阶段和作用不同。


初始化对象的具体含义

初始化对象指的是:在拿到类生成的空实例之后,给实例绑定预设的属性、运行初始准备逻辑,把空实例从一个“空白的模板”加工成符合业务需求、可以正常使用的完整实例的过程。
你可以类比为:__new__负责造出一个没有任何配置的空白手机,__init__负责给这个手机装系统、装基础软件、设置初始参数,后者的整个加工过程就是对象初始化。


内容的提问来源于stack exchange,提问作者PetitJuju

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:12:02