子类调用父类的同名成员
方式1:
class A: def f_a(self): print("----A----") class B: def f_a(self): print("----B----") class C(A, B): def f_a(self): A.f_a(self) # 子类调用父类同名方法,括号里要写self,表明这是一个类调用 B.f_a(self) # 但这样如果修改了父类方法,那么子类就要多处修改 print(‘----C----‘) c = C() c.f_a() # ----A---- # ----B---- # ----C----
方式2:使用super()
class A: def f_a(self): print("----A----") class B: def f_a(self): print("----B----") class C(A, B): def f_a(self): A.f_a(self) super().f_a() print(‘----C----‘) c = C() c.f_a() # ----A---- # ----A---- # ----C----
方式3:但super会有一个从左到右的继承顺序问题,默认是先继承左边,本例中为class A,如果我就是想用super()的方法调用B的成员,可以显式指明,如下例
class A: def f_a(self): print("----A----") class B(A): def f_a(self): print("----B----") class C(B): def f_a(self): super(B, self).f_a() # 指B的父类 super().f_a() # super(C, self).f_a(), 指C的直接父类 #super第一个参数填的是当前类 print(‘----C----‘) c = C() c.f_a() # ----A---- # ----B---- # ----C----
方式4:再来一个例子,在多重继承中,最好显式指明super()当前类的父类
class A: def f_a(self): print("----A----") class B(A): def f_a(self): print("----B----") class C(B): def f_a(self): print(‘----C----‘) class D(C): def f_a(self): super(D, self).f_a() # class C‘s f_a super(C, self).f_a() # class C‘s parent class‘s(B) f_a # super() print(‘----D----‘) pass d = D() d.f_a() # ----C---- # ----B---- # ----D----
原文地址:https://www.cnblogs.com/sayiqiu/p/10562278.html
时间: 2024-11-06 15:32:47