• 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----
  • 相关阅读:
    ArcMap影像纠偏
    关于ArcGIS动态图层空间内栅格数据,JS前端显示颜色不正确的解决方案
    发布镶嵌数据集,服务端Raster Function制作
    ARCGIS 发布TIF,金字塔文件是否Server自动生成。
    验证航行数据
    解决PLSQL Developer 插入中文 乱码问题
    ArcGIS发布动态空间,并验证
    老丫么老毛桃
    使用IIS建立主机到虚拟机的端口转发
    最大子序列求和算法二三
  • 原文地址:https://www.cnblogs.com/sayiqiu/p/10562278.html
Copyright © 2020-2023  润新知