Python 多态性
“多态性”一词的意思是“多种形式”,在编程中,它指的是具有相同名称的多种方法/函数/运算符,它们可以在许多对象或类上执行。
函数多态性
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("驾驶!")
class Boat
def __init__(self, brand, model)
self.brand = brand
self.model = model
def move(self)
print("航行!")
class Plane
def __init__(self, brand, model)
self.brand = brand
self.model = model
def move(self)
print("飞行!")
car1 = Car("福特", "野马") # 创建 Car 类
boat1 = Boat("Ibiza", "Touring 20") # 创建 Boat 类
plane1 = Plane("波音", "747") # 创建 Plane 类
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("移动!")
class Car(Vehicle)
pass
class Boat(Vehicle)
def move(self)
print("航行!")
class Plane(Vehicle)
def move(self)
print("飞行!")
car1 = Car("福特", "野马") # 创建 Car 对象
boat1 = Boat("Ibiza", "Touring 20") # 创建 Boat 对象
plane1 = Plane("波音", "747") # 创建 Plane 对象
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()
方法。
由于多态性的存在,我们可以在所有类上执行相同的方法。