创建对象和初始化对象有什么区别?关联__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
相关产品推荐
相关产品推荐

