子类可以包含与父类相同签名的方法,即子类中的方法将重写(Override)父类的方法,从而表现出与父类不同的行为,而其他方法仍然继承父类。
由继承而产生的相关的不同的类,其对象对同一方法会做出不同的响应,这种机制被称为多态(Polymorphism)。多态是面向对象编程的三大基本特征之三。
在下面示例中,子类 Car、Train 和 Bicycle 都重写了父类的 whistle 方法:
class Vehicle:
def whistle(self):
print('鸣笛声')
class Car(Vehicle):
def whistle(self):
print('嘀……嘀……')
class Train(Vehicle):
def whistle(self):
print('呜……呜……')
class Bicycle(Vehicle):
def whistle(self):
print('叮铃铃……')
上例中三个子类的实例对象可以嵌入到一个更大的容器中,通过循环语句进行遍历,并调用他们同名的方法:
vehicles = [Car(), Train(), Bicycle()]
for v in vehicles:
v.whistle()
# 嘀……嘀……
# 呜……呜……
# 叮铃铃……
这些同名的方法表现出不同的行为,这就是多态。