最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • Python多重继承

    多重继承是指一个类可以从多个基类中继承属性和方法。在Python中,我们可以使用逗号分隔不同的基类来实现多重继承,假如我们项目中需要一个鸟人的对象,这个鸟人对象就需要用到鸟人类,此时我们可以定义两个类
    Human 类和 Bird 类,然后让鸟人类继承这两个类,我们的鸟人类就具有了
    Human 类和 Bird 类的特征,这行为,我们叫做鸟人类多重继承 Human 类和 Bird 类。

    多重继承定义

    多重继承的写法需要在定义子类的括号内分别写上要继承的父类。

    class Human(object):
        def __init__(self):
            pass
    
    class Bird(object):
        def __init__(self):
            pass
    
    class BirdHuman(Human, Bird):
        def __init__(self):
            pass

    多重继承的子类拥有所有父类的所有属性和方法,这和普通重继承一样。

    class Human(object):
        humanname = "human"
    
        def hh(self):
            print(self.humanname)
    
    class Bird(object):
        birdname = "bird"
    
        def bb(self):
            print(self.birdname)
    
    class BirdHuman(Human, Bird):
        pass
    
    birdman = BirdHuman()
    birdman.hh()
    birdman.bb()
    print(birdman.humanname)
    print(birdman.birdname)

    当我们在父类中通过构造函数定义属性的时候,多重继承和普通继承采用一样的方式(参考上一章继承和多态一节),
    也就是说,我们可以通过子类把子类的对象传给父类(一般通过在子类的构造函数中调用父类的构造函数)。

    class Human(object):
        def __init__(self):
            self.humanname = "human"
    
        def hh(self):
            print(self.humanname)
    
    class Bird(object):
        def __init__(self):
            self.birdname = "bird"
    
        def bb(self):
            print(self.birdname)
    
    class BirdHuman(Human, Bird):
        def __init__(self):
            Human.__init__(self)
            Bird.__init__(self)
    
    
    birdman = BirdHuman()
    birdman.hh()
    birdman.bb()
    print(birdman.humanname)
    print(birdman.birdname)

    如果多重继承的子类的多个父类中有重名的方法,则调用的是第一个继承的父类的方法。

    class Human(object):
        def __init__(self):
            self.humanname = "I'm a man"
        def func(self):
            print(self.humanname)
    
    class Bird(object):
        def __init__(self):
            self.birdname = "I'm a bird"
        def func(self):
            print(self.birdname)
    
    class BirdHuman(Human, Bird):  # 第一个继承的父类是 Human 类
        def __init__(self):
            Human.__init__(self)
            Bird.__init__(self)
    
    birdman = BirdHuman()
    birdman.func()  # 调用的是 Human 类的 func 函数

    如果多重继承的子类的多个父类中有重名的属性,调用的是到目前为止给该属性赋值的类中的属性,这个理所当然。

    class Human(object):
        def __init__(self):
            self.name = "human"
    
    class Bird(object):
        def __init__(self):
            self.name = "bird"
    
    class BirdHuman(Human, Bird):
        def __init__(self):
            Human.__init__(self)
            Bird.__init__(self)
    
    birdman = BirdHuman()
    print(birdman.name)    # 最后一次调用的是 Bird 的构造函数,所以目前为止 name 为 bird
    
    
    class BirdHumanTwo(Human, Bird):
        def __init__(self):
            Bird.__init__(self)
            Human.__init__(self)
    
    birdmantwo = BirdHumanTwo()
    print(birdmantwo.name)  # 最后一次调用的是 Human 的构造函数,所以目前为止 name 为 human

    如果在我们 BirdHuman 类中,我们认为该类中含有的 Human 的功能比较多,
    而 Bird 类中仅仅只是一个辅助类,里面只有很少的属性和方法,
    在 Python 中这种多重继承关系,我们把 Bird 这种辅助类叫作
    MixIn,我们写代码的时候要习惯于给辅助父类命名的时候加上 MixIn,当然你也可以不加上这个关键字。

    class Human(object):
        def __init__(self):
            pass
    
    class BirdMixIn(object):
        def __init__(self):
            pass
    
    class BirdHuman(Human, BirdMixIn):
        def __init__(self):
            pass

    本节重要知识点

    会使用多重继承。

    知道什么是MixIn。

    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » Python多重继承
    • 7会员总数(位)
    • 25846资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 293稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情