zoukankan      html  css  js  c++  java
  • python多继承中子类访问祖先类的同名成员

    子类调用父类的同名成员

    方式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----
  • 相关阅读:
    审核系统
    ehcache 缓存
    tomcat 内存设置
    html5 开发 跨平台 桌面应用
    service thread 结合使用
    html5桌面应用
    鼠标 事件
    服务器 判断 客户端 文件下载
    使用github管理Eclipse分布式项目开发
    uub代码
  • 原文地址:https://www.cnblogs.com/sayiqiu/p/10562278.html
Copyright © 2011-2022 走看看