目录

Python 多态


"polymorphism" 一词表示"many forms",在编程中它指的是可以在许多对象或类上执行的同名方法/函数/运算符。


函数多态性

可用于不同对象的 Python 函数的示例是len()功能。

字符串

对于字符串len()返回字符数:

示例

x = "Hello World!"

print(len(x))
亲自试一试 »

元组

对于元组len()返回元组中的项目数:

示例

mytuple = ("apple", "banana", "cherry")

print(len(mytuple))
亲自试一试 »

字典

对于字典len()返回字典中键/值对的数量:

示例

thisdict = {
  "brand": "Ford",
  "model": "Mustang",
  "year": 1964
}

print(len(thisdict))
亲自试一试 »


类多态性

多态性经常用在类方法中,我们可以有多个具有相同方法名称的类。

例如,假设我们有三个类: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

这个BoatPlane类也继承brand,model, 和move()Vehicle,但它们都覆盖了move()方法。

由于多态性,我们可以对所有类执行相同的方法。