zoukankan      html  css  js  c++  java
  • (一)Python入门-6面向对象编程:08多重继承-mro()-super()获得父类的定义

    一:多重继承

      Python支持多重继承,一个子类可以有多个“直接父类”。这样,就具备了“多个父类”的特点。但是由于,这样会被“类的整体层次”搞的异常复杂,尽量避免使用。

    二:mro()

      Python支持多继承,如果父类中有相同名字的方法,在子类没有指定父类名时,解释器将 “从左向右”按顺序搜索。

      MRO(MethodResolution Order):方法解析顺序。 我们可以通过mro()方法获得 “类的层次结构”,方法解析顺序也是按照这个“类的层次结构”寻找的。

    【操作】多重继承-mro()

    #多重继承-mro()
    class A:
        def aa(self):
            print('aa')
        def say(self):
            print('say AAA')
    
    class B:
        def bb(self):
            print('bb')
        def say(self):
            print('say BBB')
    
    class C(B,A):
        def cc(self):
            print('cc')
    
    cc = C()
    print(C.mro())    #打印类的层次结构
    cc.say()          #解释器寻找方法是‘从左到右’的方式寻找,此时会执行B中的say()

    三:super()获得父类定义

      在子类中,如果想要获得父类的方法时,我们可以通过 super()来做。

      super()代表父类的定义,不是父类对象。

    【操作】

    #super()
    class A:
        def say(self):
            print('A:',self)
            print('say AAA')
    
    class B(A):
        def say(self):
            #A.say(self)      #调用父类的say()方法
            super().say()    #通过super()调用父类方法
            print('say BBB')
    
    b = B()
    b.say()

    运行结果:

      A: <__main__.B object at 0x0000020326058AC8>
      say AAA
      say BBB

  • 相关阅读:
    记一道乘法&加法线段树(模版题)
    2021CCPC网络赛(重赛)题解
    Codeforces Round #747 (Div. 2)题解
    F. Mattress Run 题解
    Codeforces Round #744 (Div. 3) G题题解
    AtCoder Beginner Contest 220部分题(G,H)题解
    Educational Codeforces Round 114 (Rated for Div. 2)题解
    Codeforces Global Round 16题解
    Educational Codeforces Round 113 (Rated for Div. 2)题解
    AtCoder Beginner Contest 182 F
  • 原文地址:https://www.cnblogs.com/jack-zh/p/10849735.html
Copyright © 2011-2022 走看看