python中的 __inti__ 和 __new__ 方法的区别

这个要从Python的面向对象实例化的过程说起

类名() 之后,开辟一块内存空间,然后调用__init__把空间的内存地址作为self的参数传递到函数的内部,所有和self有关的参数,属性都会和self关联起来,执行__init__之后,self就会自动返回到调用出

class A:
    def  __new__(cls, *args, **kwargs):
        o = object.__new__(cls)
        print('执行了new',o)
        return o
    def __init__(self):
        print('执行init',self)
A()

# 实例化的时候
# 先创建一块对象的空间,有一个指针能指向类 --> __new__
# 调用init --> __init__

执行结果
执行了new <__main__.A object at 0x0000000001D927F0>
执行init <__main__.A object at 0x0000000001D927F0>

所以__new__是在__init__之前执行,

__new__ 是在对象创建之前创建一个对象,并将该对象返回给init。在创建类对象时调用

__init__ 在对象创建后,对对象进行初始化。在实例化时调用

猜你喜欢

转载自www.cnblogs.com/well-666/p/11913642.html