上面,b调用了class B,如何实现调用父类A?
from threading import Thread # 多线程编程
class My_Thread(Thread):
def __init__(self,name,user):
self.user = user
# self.name = name
super().__init__(name=name) # 此处直接调用父类,将构造函数交给父类去实例化,可以重用父类的代码
# 既然我们要重写B的构造函数,方法不一定是__init__方法,为什么还要去调用super?
# super到底执行顺序是怎么样的?
class A:
def __init__(self):
print("A")
class B(A):
def __init__(self):
print("B")
super().__init__() # super获取父类,并调用__init__函数
class C(A):
def __init__(self):
print("C")
super().__init__()
class D(B,C):
def __init__(self):
print("D")
super(D,self).__init__() # D会调用父类,B/C均是父类,由于B在C之前,因此会先调用B的构造函数,
# B也调用super,自己的父类A,但是实际上并没有这么干,
# 而在调用mro,按照mro顺序执行,B到C,然后才到A
if __name__ == "__main__":
d = D()
print(D.__mro__)
C:\Users\Amber\PycharmProjects\test0\venv\Scripts\python.exe C:/Users/Amber/PycharmProjects/test0/Chapter03/super_test.py
D
B
C
A
(, , , , )
Process finished with exit code 0
作者:世界非世界,是名世界!