深南之星

导航

 

1.构造方法包括创建对象和初始化对象,在python当中,分为两步执行:先执行__new__方法,然后执行__init__方法;
2.__init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值。
3.__new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例,是个静态方法。
总结:也就是,__new__在__init__之前被调用,__new__的返回值(实例)将传递给__init__方法的第一个参数,然后__init__给这个实例设置一些参数。

 

例如:

class A:

    def __init__(self):

        print(self)

        print("self id :",id(self))

        print("in __init__")

 

    def __new__(cls, *args, **kwargs):

        print("cls id",id(cls))

        print("in __new__")

        ret = object.__new__(cls)

        print(ret)

        print("ret id: ",id(ret))

        return ret

 

print("A id",id(A))

aa = A()

 

结果:

A id 2325495978840

cls id 2325495978840

in __new__

<__main__.A object at 0x0000021D726FCA20>

ret id:  2325497236000

<__main__.A object at 0x0000021D726FCA20>

self id : 2325497236000

in __init__

 

 

posted on 2020-02-17 21:49  深南之星  阅读(116)  评论(0编辑  收藏  举报