用python来探讨多态

最近在看一本基于pyhton的Design Pattern方面的书,其中涉及到了python的多态,也就是polymorphism。用python来解释,到底什么是多态(polymorphism)呢?StackOverflow上有一个很好的答案,下面便是答案中举的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Animal:
def __init__(self, name): # Constructor of the class
self.name = name
def talk(self): # Abstract method, defined by convention only
raise NotImplementedError("Subclass must implement abstract method")

class Cat(Animal):
def talk(self):
return 'Meow!'

class Dog(Animal):
def talk(self):
return 'Woof! Woof!'

animals = [Cat('Missy'),
Cat('Mr. Mistoffelees'),
Dog('Lassie')]

for animal in animals:
print animal.name + ': ' + animal.talk()

从这个例子我们可以看出,不同的动物都可以“talk”,但它们“talk”的实现方式不同。 因此,“talk”行为是多态的,它根据动物的不同而有所不同。 我们可以看到,抽象的Animal类实际上并不能“talk”,而具体的动物类(如Dog和Cat)则分别实现了“talk”的动作。

类似地,加法操作符+在许多数学运算中有定义,在特定情况下,多态性允许我们根据具体规则定义加法操作符,比如在实数集下:1 + 1 = 2,但包含复数的情况下(1 + 2i)+(2-9i)=(3-7i)

总结来说,多态允许我们在抽象类中指定常用方法,并在特定子类中实现它们。

参考

  1. Wikipedia Polymorphism
  2. StackOverflow Polymorphism