"polymorphism" 一词表示"many forms",在编程中它指的是可以在许多对象或类上执行的同名方法/函数/运算符。
可用于不同对象的 Python 函数的示例是len()
功能。
对于字符串len()
返回字符数:
对于元组len()
返回元组中的项目数:
对于字典len()
返回字典中键/值对的数量:
多态性经常用在类方法中,我们可以有多个具有相同方法名称的类。
例如,假设我们有三个类:Car
,Boat
, 和Plane
,他们都有一个方法叫做move()
:
不同的类具有相同的方法:
class Car:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Drive!")
class Boat:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Sail!")
class Plane:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Fly!")
car1 = Car("Ford", "Mustang") #Create a Car class
boat1 = Boat("Ibiza", "Touring 20") #Create a Boat class
plane1 = Plane("Boeing", "747") #Create a Plane class
for x in (car1, boat1, plane1):
x.move()
亲自试一试 »
看最后的for循环。由于多态性,我们可以对所有三个类执行相同的方法。
具有同名子类的类怎么样?我们可以在那里使用多态性吗?
是的。如果我们使用上面的示例并创建一个名为Vehicle
, 和做Car
,Boat
,Plane
子班的Vehicle
,子类继承Vehicle
方法,但可以重写它们:
创建一个名为Vehicle
和做Car
,Boat
,Plane
子班的Vehicle
:
class Vehicle:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Move!")
class Car(Vehicle):
pass
class Boat(Vehicle):
def move(self):
print("Sail!")
class Plane(Vehicle):
def move(self):
print("Fly!")
car1 = Car("Ford", "Mustang") #Create a Car object
boat1 = Boat("Ibiza", "Touring 20") #Create a Boat object
plane1 = Plane("Boeing", "747") #Create a Plane object
for x in (car1, boat1, plane1):
print(x.brand)
print(x.model)
x.move()
亲自试一试 »
子类继承父类的属性和方法。
在上面的例子中你可以看到Car
类是空的,但它继承了brand
, model
, 和move()
从Vehicle
。
这个Boat
和Plane
类也继承brand
,model
, 和move()
从Vehicle
,但它们都覆盖了move()
方法。
由于多态性,我们可以对所有类执行相同的方法。
截取页面反馈部分,让我们更快修复内容!也可以直接跳过填写反馈内容!