注意事项:super调用父类的方法是按照 mro 顺序来调用的,因此多继承中不一定调用的就是父类方法!!


    目标:

    1:掌握子类继承父类时调用父类方法的两种形式以及区别
    2:掌握什么是多继承中的菱形继承(钻石继承)
    2:掌握多继承中的mro顺序作用

    一:子类继承父类时调用父类方法的两种形式以及区别

    方法一:父类名.方法名(self,参数1,参数2……..) 例如 parent . init(self , name , age , gender)

    方法二:super(). 方法名(参数1,参数2…..) 例如 super().init(name,age,gender)

    两种方法的区别:第一种方法继承时要传递参数 self 第二种方法不需要传递 self !!

    图示:

    父类名.方法名(self,参数1,参数2……..)

    image.png


    super(). 方法名(参数1,参数2…..)

    image.png


    二:什么是多继承中的菱形继承(钻石继承)

    图示:

    image.png

    注意事项:

    1:出现菱形继承时,如果操作不当(利用父类名调用父类方法),可能会出现祖父类的某方法调用多次(只想调用一次),这是我们必须要用super()继承父类方法来解决这一问题!!!

    2:因此在多继承中应该尽量避免使用父类名.父类方法 这种形式调用父类的方法,会造成有的父类方法调用两次,使用super调用了完美解决



    三:多继承中的mro顺序作用

    使用语法:
    1:类名.mro()
    2:类名.mro


    image.png

    注意事项:

    1:多继承中利用 super 调用父类的方法,不一定是调用父类的方法,而是按照多继承中的 mro 顺序来调用的

    2:如果子类利用super调用父类方法,父类中没有super方法 就不会按照 mro 顺序调用方法,因此要想按照 mro 顺序调用方法,必须要求所有参与继承的家族类中都要有 super方法!**