Python 中的多重继承

Ishaan Shrivastava 2021年7月10日
Python 中的多重继承

继承允许我们在子类中使用父类的特性,它是面向对象编程的一个基本特性。它有助于从父类到子类的数据的可重用性和可传递性,并补偿数据丢失。

多重继承是指子类从两个或多个父类继承方法和功能。一次导出所有数据是有益的。尽管如此,另一方面,它带来了使用的复杂性和歧义。如果多个父母拥有相同的特征,那么分辨哪个特征来自哪个父母是不明确的。它发生在未正确使用或实现多重继承时。虚拟继承、方法解析顺序 (MRO) 的使用和 super() 函数可以以某种方式降低其风险。

我们在以下代码中看到了多重继承的基本示例。

class Father():
    def drive(self):
        print("Father drives his son to school")

class Mother():
    def cook(self):
        print("Mother loves to cook for her son")

class Son(Father, Mother):
    def love(self):
        print("I love my Parents")
    
c=Son()
c.drive()
c.cook()
c.love()

输出:

Father drives his son to school
Mother loves to cook for her son
I love my parents

子类 Son 派生自父类 FatherMother,这允许它使用函数 drive()cook() 来提供所需的输出。

super() 函数引用继承子类中的父类或兄弟类,并返回一个临时对象,该对象允许子类使用所有超类方法。

这通常是在继承开始跨越路径时出现歧义的情况下完成的,即当两个父类也从超级基类派生时。

例如,

class Animals:
    def __init__(self, animalsName):
        print(animalsName, 'is an animal.');


class Mammal(Animals):
    def __init__(self, Name):
        print(Name, 'is a mammal.')
        super().__init__(Name)
    

class donotFly(Mammal):
      def __init__(self, name):
        print(name, "cannot fly.")
        super().__init__(name)


class donotSwim(Mammal):
    def __init__(self, name):
        print(name, "cannot swim.")
        super().__init__(name)


class Cat(donotSwim, donotFly):
    def __init__(self):
        print('A cat.');
        super().__init__('Cat')

cat = Cat()
print('')
bat = donotSwim('Bat')

输出:

A cat.
Cat cannot swim.
Cat cannot fly.
Cat is a mammal.
Cat is an animal.

Bat cannot swim.
Bat is a mammal.
Bat is an animal.

创建了一个子类 Cat,由两个父类 donotswimdonotfly 继承。然后,哺乳动物类自己继承它们。Mammals 类还继承了超类 Animals 的属性。因此,在这种情况下,我们使用 super() 函数来轻松访问超类方法。

相关文章 - Python Class