Python入门-6面向对象编程:08多重继承-mro()-super()获得父类的定义

Posted jack-zh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于Python入门-6面向对象编程:08多重继承-mro()-super()获得父类的定义的主要内容,如果未能解决你的问题,请参考以下文章

Python实用笔记 (25)面向对象高级编程——多重继承

python Class:面向对象高级编程 多重继承

Python入门-6面向对象编程:12组合

Python入门-6面向对象编程:09多态

入门Go语言面向对象

Golang-面向对象编程三大特性-继承多重继承