关于new方法提问
家人们问一下谁能跟我讲解一下下面这个代码:class A():
def __init__(self):
print("A init")
class B(A):
def __new__(self):
print("B new")
def __init__(self):
print("B init")
class C(B):
def __init__(self):
print("C init")
def main():
a=A()
b=B()
c=C()
main()
这个代码的逻辑是怎么回事啊,为什么我完全看不懂它输出的结果
拜托了谢谢家人们谢谢大佬们 一个类在实例化的时候先调用 __new__ 返回一个实例化对象,然后再调用实例化对象的 __init__
a = A() 相当于 a = A.__new__(A); a.__init__()
b = B() 相当于 b = B.__new__(B); b.__init__()
c = C() 相当于 c = C.__new__(C); c.__init__()
因为你没有重写 A 的 __new__ 方法,所以 A 的 __init__ 方法可以正常调用
而你重写了 B 和 C 的 __new__ 方法,而且你重写的 __new__ 没有返回值(也就是返回None),
所以 b 和 c 实际上是 None 对象,所以调用了 None 的 __init__ 方法,而没有调用 B 和 C 的 __init__ 方法 isdkz 发表于 2023-1-29 22:24
一个类在实例化的时候先调用 __new__ 返回一个实例化对象,然后再调用实例化对象的 __init__
a = A() 相 ...
讲得好明白!谢谢您 星夕ING 发表于 2023-1-29 22:33
讲得好明白!谢谢您
不客气{:5_109:}
页:
[1]