简介
多态 是指利用相同的接口来处理不同的基础形式,比如数据类型或者类。这使得函数能够在不同的时间使用不同类型的实体。
对于 Python 中的面向对象编程,这意味着属于特定类的特定对象可以以与属于不同类的不同对象相同的方式使用。
多态允许灵活性和松散耦合,使得代码可以随着时间的推移进行扩展和轻松维护。
本教程将介绍如何在 Python 中将多态应用于类。
先决条件
您应该已经安装了 Python 3,并在计算机或服务器上设置了编程环境。如果您还没有设置编程环境,可以参考适用于您的操作系统(Ubuntu、CentOS、Debian 等)的本地编程环境或服务器编程环境的安装和设置指南。
什么是多态?
多态是 Python 类定义中的一个重要特性,当您在类或子类之间具有通用命名的方法时会用到。这允许函数使用任何这些多态类的对象,而无需了解类之间的区别。
多态可以通过继承来实现,子类可以使用基类方法或覆盖它们。
Python 的 鸭子类型 是动态类型的一个特例,使用了多态的特征,包括后期绑定和动态分派。 “鸭子类型” 这个术语源自作家詹姆斯·惠特科姆·赖利的一句话:“当我看到一只像鸭子一样走路、游泳和嘎嘎叫的鸟时,我就称它为鸭子。” 意大利计算机工程师亚历克斯·马特里利在 comp.lang.python 新闻组的一条消息中引用了这句话,使用鸭子类型是为了确定对象是否适合特定目的。在使用普通类型时,适用性仅由对象的类型确定,但是使用鸭子类型时,将使用方法和属性的存在来确定适用性,而不是对象的实际类型。也就是说,您检查对象是否像鸭子一样嘎嘎叫和走路,而不是询问对象是否 是 一只鸭子。
当几个类或子类具有相同的方法名称,但这些方法的实现不同时,这些类是多态的,因为它们使用单一接口与不同类型的实体一起使用。函数将能够评估这些多态方法,而无需知道调用了哪些类。
创建多态类
为了利用多态,我们将创建两个不同的类,用于处理两个不同的对象。这两个不同的类都需要具有共同的接口,以便它们可以多态地使用,因此我们将为它们提供具有相同名称但功能不同的方法。
我们将创建一个 Shark
类和一个 Clownfish
类,它们分别定义了 swim()
、swim_backwards()
和 skeleton()
方法。
class Shark():
def swim(self):
print("The shark is swimming.")