多态
在Python中,多态指在不考虑对象类型的情况下使用对象。相比于强类型,Python更推崇“鸭子类型”。“鸭子类型”是这样推断的:如果一只生物走起路来像鸭子,游起泳来像鸭子,叫起来也像鸭子,那么它就可以被当做鸭子。也就是说,“鸭子类型”不关注对象的类型,而是关注对象具有的行为。
Python中并不需要显式指定对象的类型,只要对象具有预期的方法和表达式操作符,就可以使用对象。也可以说,只要对象支持所预期的“接口”,就可以使用,从而实现多态。一个体现多态特性的示例如下所示:
class Animal(object): # 定义父类Animal
def move(self):
pass
class Rabbit(Animal): # 定义子类Rabbit
def move(self):
print("兔子蹦蹦跳跳")
class Snail(Animal): # 定义子类Snail
def move(self):
print("蜗牛缓慢爬行")
def test(obj): # 在函数test()中调用了对象的move()方法
obj.move()
上述代码定义了Animal类和它的两个子类Rabbit类和Snail类,它们都有move()方法。定义函数test(),该函数接收一个参数obj,并在其中让obj调用了move()方法。
接下来,分别创建Rabbit类和Snail类的对象,将这两个对象做为参数传入test()函数中。代码如下所示:
rabbit = Rabbit()
test(rabbit) # 接收Rabbit类的对象
snail = Snail()
test(snail) # 接收Snail类的对象
运行代码,结果如下所示:
兔子蹦蹦跳跳
蜗牛缓慢爬行
分析运行结果可知,同一个函数会根据参数的类型去调用不同的方法,从而产生不同的结果。