python_单继承与多继承

系统 142 0

单继承与多继承?

单继承:一个类只能继承一个父类的方式。
多继承:一个类可以继承多个父类的方式。

单继承:(生物角度)
人类->哺乳类动物->动物->生物->有机物…

多继承:(社会角度)

            
              舞蹈老师(教舞蹈)       体育老师(运动)    爸爸(帅气)  妈妈(打扫卫生)

    我(舞蹈,运动,帅气,打扫卫生)

            
          

单继承案例:
父类:
pass

            
              子类(父类):
    pass

            
          

多继承案例:
父类1:
pass
父类2:
pass
父类3:
pass

            
              子类(父类1,父类2,父类3):
    pass

            
          

多继承的问题所在:菱形继承或者钻石继承中的问题。
菱形bug:某个方法在继承中被多次调用!

菱形继承的bug解决:MRO列表和super 类

            
              解决办法:将菱形继承改变成类似于单继承的方式

当我们定义一个菱形继承关系的时候,程序会自动生成一个新的MRO列表。

MRO列表: Method Realtion Order  方法关系列表。

MRO列表的生成的原则:1.子类永远在父类的前面  2.同一等级的类,按照子类中的继承顺序摆放

super()调用的时候,不是查找父类, 实际上super是查找MRO列表的上一个类

super()调用对象方法的时候不需要传入对象,自动传入

issubclass(子类,父类) :检测一个类是否是另一个类的子类

如果需要查看mro列表,可以使用类名.mro() 方法 或用类名.__mro__ 查看


            
          
            
              
                # 继承又分为 单继承 和多继承两种
              
              
                # 单继承:一个类只能继承一个类
              
              
                # 多继承:一个类可以继承多个类
              
              
                # 血缘关系(单继承)
              
              
                class
              
              
                GrandFather
              
              
                (
              
              
                )
              
              
                :
              
              
    money 
              
                =
              
              
                10000000
              
              
                class
              
              
                Father
              
              
                (
              
              GrandFather
              
                )
              
              
                :
              
              
    money 
              
                =
              
              
                1000
              
              
    face 
              
                =
              
              
                "帅气的一张脸"
              
              
                class
              
              
                Me
              
              
                (
              
              Father
              
                )
              
              
                :
              
              
                pass
              
              
                # 实例化
              
              
myself 
              
                =
              
               Me
              
                (
              
              
                )
              
              
                print
              
              
                (
              
              myself
              
                .
              
              money
              
                )
              
              
                print
              
              
                (
              
              myself
              
                .
              
              face
              
                )
              
              
                # 多继承(社会角度)
              
              
                class
              
              
                Python
              
              
                (
              
              
                )
              
              
                :
              
              
                def
              
              
                luoji
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                print
              
              
                (
              
              
                "语法阶段培养逻辑思路"
              
              
                )
              
              
                class
              
              
                Spider
              
              
                (
              
              
                )
              
              
                :
              
              
                def
              
              
                paqu
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                print
              
              
                (
              
              
                "爬虫阶段学会了抓自己感兴趣的小姐姐图片"
              
              
                )
              
              
                class
              
              
                Think
              
              
                (
              
              
                )
              
              
                :
              
              
                def
              
              
                fenxi
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                print
              
              
                (
              
              
                "数据分析阶段我学会了数据分析科学的方法"
              
              
                )
              
              
                class
              
              
                MySelf
              
              
                (
              
              Think
              
                ,
              
              Spider
              
                ,
              
              Python
              
                )
              
              
                :
              
              
                pass
              
              
me 
              
                =
              
               MySelf
              
                (
              
              
                )
              
              
me
              
                .
              
              luoji
              
                (
              
              
                )
              
              
me
              
                .
              
              paqu
              
                (
              
              
                )
              
              
me
              
                .
              
              fenxi
              
                (
              
              
                )
              
              
                # 多继承带来的BUG-菱形继承
              
              
                class
              
              
                Human
              
              
                (
              
              
                )
              
              
                :
              
              
                def
              
              
                say
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                print
              
              
                (
              
              
                "人类向天怒吼:人定胜天!"
              
              
                )
              
              
                class
              
              
                Man
              
              
                (
              
              Human
              
                )
              
              
                :
              
              
                def
              
              
                say
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                super
              
              
                (
              
              
                )
              
              
                .
              
              say
              
                (
              
              
                )
              
              
                print
              
              
                (
              
              
                "男人向天怒吼:女孩的心思我不懂~"
              
              
                )
              
              
                class
              
              
                WoMan
              
              
                (
              
              Human
              
                )
              
              
                :
              
              
                def
              
              
                say
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                super
              
              
                (
              
              
                )
              
              
                .
              
              say
              
                (
              
              
                )
              
              
                print
              
              
                (
              
              
                "女人向天怒吼:男人你们能不能别猜我心思了"
              
              
                )
              
              
                class
              
              
                Child
              
              
                (
              
              Man
              
                ,
              
              WoMan
              
                )
              
              
                :
              
              
                def
              
              
                say
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                super
              
              
                (
              
              
                )
              
              
                .
              
              say
              
                (
              
              
                )
              
              
                print
              
              
                (
              
              
                "小孩向天怒吼:哇哇哇~"
              
              
                )
              
              
                # 实例化
              
              
child 
              
                =
              
               Child
              
                (
              
              
                )
              
              
                # child.say()
              
              
                # mro列表
              
              
                print
              
              
                (
              
              Child
              
                .
              
              mro
              
                (
              
              
                )
              
              
                )
              
              
                # super()  实际是调用 mro列表的上一级关系
              
            
          

更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请请扫描上面二维码支持博主1元、2元、5元等您想捐的金额吧,狠狠点击下面给点支持吧

发表我的评论
最新评论 总共0条评论