__new__(cls)方法详解

发布时间 2023-12-26 17:49:29作者: Junior_bond

只要是面向对象的编程语言,类的实例化一定包含两个步骤:
(1)在内存中创建对象,即开辟一块内存空间来存放类的实例化对象(Instance);
(2)初始化对象,即给实例的属性赋予初始值。

在 python 中,第一步由 __new__ 函数负责,第二步由 __init__ 函数负责。
__new__的返回值是__init__中的self

如果__new__方法返回None,则__init__方法不会被执行,并且创建空对象时只能调用父类中的__new__方法,而不能调用毫无关系的类的__new__方法

 

class Foo():
    def __new__(Foo, age,name):
        obj=super().__new__(Foo)
        print('obj 的id:',id(obj))
        print(obj.__dict__)
        return obj
    def __init__(self,age,name):
        print(self.__dict__)
        self.age=age
        self.name=name
        print(self.__dict__)
        print('self的id:',id(self))

f1=Foo(100,'yyy')
print('f1  的id:',id(f1))
print(f1.__dict__)

打印结果:

obj 的id: 2867407950352
{}
{}
{'age': 100, 'name': 'yyy'}
self的id: 2867407950352
f1 的id: 2867407950352
{'age': 100, 'name': 'yyy'}