__new__方法和__init__方法

请问各位下面两个程序为什么会得出这样的输出?原理是什么样的?
一:

class A:
    def __new__(self):
        print("Anew")

    def __init__(self):
        print("Ainit")


class B:
    def __new__(self):
        print("Bnew")

    def __init__(self):
        print("Binit")


b = B()
a = A()

img

二:

class A:
    def __new__(self):
        self.__init__(self)
        print("Anew")

    def __init__(self):
        print("Ainit")


class B:
    def __new__(self):
        self.__init__(self)
        print("Bnew")

    def __init__(self):
        print("Binit")


b = B()
a = A()

img

第二个你在new函数里先调用了init,自然会先输出init,然后输出new了

  1. 首先你需要明白__new__和__init__都是类的构造方法,前者是在类实例化前就会调用,后者是在你实例化一个对象后才被调用,通常用于初始化一个类的实例,你可以认为前者比后者先被调用。
  2. 回到你的问题本身,对于一,我上面已经回答了,对于二,由于在调用__new__的时候,该方法里调用了__init__,所以__init__的内容会先输出,然后才print。