Python超级()
重要的 OOP 特性之一是Python中的继承。当一个类从另一个类继承部分或全部行为时称为继承。在这种情况下,继承的类是子类,后一个类是父类。
在继承的子类中,可以使用 super()函数来引用父类。 super函数返回超类的一个临时对象,该对象允许对其子类的所有方法进行访问。
注意:有关更多信息,请参阅Python中的继承
此外,使用超级函数的好处是:-
- 无需记住或指定父类名称即可访问其方法。此函数可用于单继承和多继承。
- 这实现了模块化(隔离更改)和代码可重用性,因为无需重写整个函数。
- Python中的超级函数是动态调用的,因为Python是一种不同于其他语言的动态语言。
使用超级函数有 3 个限制条件:-
- 超函数引用的类及其方法
- 超级函数和被调用函数的参数应该匹配。
- 使用该方法后,该方法的每次出现都必须包含 super() 。
单继承中的超级函数
示例:让我们以动物为例。狗、猫和牛是动物的一部分。它们还具有共同的特征,例如-
- 它们是哺乳动物。
- 它们有一条尾巴和四条腿。
- 它们是家畜。
因此,狗、猫和马类是动物类的子类。这是一个单继承的例子,因为许多子类都是从一个父类继承而来的。
Python3
# Python program to demonstrate
# super function
class Animals:
# Initializing constructor
def __init__(self):
self.legs = 4
self.domestic = True
self.tail = True
self.mammals = True
def isMammal(self):
if self.mammals:
print("It is a mammal.")
def isDomestic(self):
if self.domestic:
print("It is a domestic animal.")
class Dogs(Animals):
def __init__(self):
super().__init__()
def isMammal(self):
super().isMammal()
class Horses(Animals):
def __init__(self):
super().__init__()
def hasTailandLegs(self):
if self.tail and self.legs == 4:
print("Has legs and tail")
# Driver code
Tom = Dogs()
Tom.isMammal()
Bruno = Horses()
Bruno.hasTailandLegs()
Python3
class Mammal():
def __init__(self, name):
print(name, "Is a mammal")
class canFly(Mammal):
def __init__(self, canFly_name):
print(canFly_name, "cannot fly")
# Calling Parent class
# Constructor
super().__init__(canFly_name)
class canSwim(Mammal):
def __init__(self, canSwim_name):
print(canSwim_name, "cannot swim")
super().__init__(canSwim_name)
class Animal(canFly, canSwim):
def __init__(self, name):
# Calling the constructor
# of both the parent
# class in the order of
# their inheritance
super().__init__(name)
# Driver Code
Carol = Animal("Dog")
输出:
It is a mammal.
Has legs and tail
多重继承中的超级函数
示例:让我们再举一个例子。假设类 canfly 和 canswim 继承自哺乳动物类,并且这些类由动物类继承。所以动物类继承自多个基类。让我们看看在这种情况下 super 的用法。
Python3
class Mammal():
def __init__(self, name):
print(name, "Is a mammal")
class canFly(Mammal):
def __init__(self, canFly_name):
print(canFly_name, "cannot fly")
# Calling Parent class
# Constructor
super().__init__(canFly_name)
class canSwim(Mammal):
def __init__(self, canSwim_name):
print(canSwim_name, "cannot swim")
super().__init__(canSwim_name)
class Animal(canFly, canSwim):
def __init__(self, name):
# Calling the constructor
# of both the parent
# class in the order of
# their inheritance
super().__init__(name)
# Driver Code
Carol = Animal("Dog")
输出:
Dog cannot fly
Dog cannot swim
Dog Is a mammal
Animal 类继承自两个父类——canFly 和 canSwim。因此,子类实例 Carol 可以访问两个父类构造函数。