码迷,mamicode.com
首页 > 编程语言 > 详细

python多继承中子类访问祖先类的同名成员

时间:2019-03-20 01:04:43      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:span   参数   self   访问   def   父类   修改   elf   最好   

子类调用父类的同名成员

方式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----

 

python多继承中子类访问祖先类的同名成员

标签:span   参数   self   访问   def   父类   修改   elf   最好   

原文地址:https://www.cnblogs.com/sayiqiu/p/10562278.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!