求助!关于super()的用法
请看下面的代码:class A:
def __init__(self):
print('A')
class B:
def __init__(self):
print('B')
class C(A,B):
def __init__(self):
print("C")
super().__init__()
c = C()
结果:
C
A
但如果在A类的print后加上super().__init(),结果就是:
C
A
B
这到底是为什么啊,头疼{:10_247:} 本帖最后由 ba21 于 2019-2-8 00:05 编辑
但如果在A类的print后加上super().__init(),结果就是:
能正常工作? ba21 发表于 2019-2-8 00:03
但如果在A类的print后加上super().__init(),结果就是:
能正常工作?
能啊。写成:
class A:
def __init__(self):
print("A")
super().__init__() 多继承比较复杂,以后少用
一般在多继承时不用super函数,一般这么用
class A():
def __init__(self):
print('A')
class B():
def __init__(self):
print('B')
class C(A,B):
def __init__(self):
print("C")
A.__init__(self)
B.__init__(self)
c = C()
你的程序中C类先继承了A类,再继承B类,如果用super函数,super先在A类中找到了__init__方法,没去管B类
试试下面这个:
class A:
def __init__(self):
print('A')
class B:
def __init__(self):
print('B')
class C(B,A):
def __init__(self):
print("C")
super().__init__()
c = C()
在A类中的__init__方法使用super,super排除了A类,在B类查找,所以执行B类的__init__方法
总之多继承很复杂,要避免使用,希望对你有用 有风陪伴的日子 发表于 2019-2-8 10:29
能啊。写成:
class A:
def __init__(self):
>>> print(C.mro())
[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]
super获取的是mro()中的下一个列表。
在MRO列表中,C的下一个类是A。所以在C类中的super(),代表A。A类中的super(),代表B,以此类推
页:
[1]