学科分类
目录
基础

多态

在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类的对象

运行代码,结果如下所示:

兔子蹦蹦跳跳
蜗牛缓慢爬行

分析运行结果可知,同一个函数会根据参数的类型去调用不同的方法,从而产生不同的结果。

点击此处
隐藏目录