python3-__init__() 与__new__()的作用

【例1】

class ClassA(object):
     def __new__(cls, *args, **kwargs):
         object = super(ClassA, cls).__new__(cls)
         print("in New")
         return object


     def __init__(self, *args, **kwargs):
         print("in init")

ClassA()

输出:

in New
in init

可以看出先调用__new__() 再调用 __init__()

【例2】

class ClassA(object):
     def __new__(cls, *args, **kwargs):
         object = super(ClassA, cls).__new__(cls)
         print("in New")
         #return object


     def __init__(self, *args, **kwargs):
         print("in init")

ClassA()

(只在例1的基本上注掉__new__()中的return object——不返回实例)。

输出:

in New

__init__() 没被调用!

【作用】:

__new__():真正的构造函数,负责返回实例;

__init__():初始化函数,负责在得到实例后进一步初始化一些实例变量。

如果__new__()是类函数,一定会执行;__init__()是实例函数,如果__new__()未返回实例,那么__init__()将没有机会执行。

猜你喜欢

转载自blog.csdn.net/menghaocheng/article/details/83316770