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----
  • 相关阅读:
    jquery 的 outerWidth() 、width() 、innerWidth()
    图片自动切换 避免 鼠标快速滑过
    Ajax中日历控件的使用
    asp.net如何读取xml文件中的数据
    ASP.NET使用AspNetPager实现简单的分页功能
    XmlDataDocument与DataSet相互转化
    C#中如何过滤掉多余的html代码
    asp.net的几种经典的页面传值方法
    ASP.Net分页方法详解
    ASP.Net中省市级联有关
  • 原文地址:https://www.cnblogs.com/sayiqiu/p/10562278.html
Copyright © 2011-2022 走看看