(一)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

猜你喜欢

转载自www.cnblogs.com/jack-zh/p/10849735.html