接上文Python开发从零开始-20.6-基础语法(面向对象),本文将继续介绍 Python 面向对象编程的相关知识。
(七)多态
多态(Polymorphism)源自希腊语,意思是“多种形态”。多态是面向对象编程的核心概念,是指同一个接口或方法,在不同的对象上能表现出不同的行为。Python 作为一种动态类型语言,支持多态性,还能实现同一个方法可以处理不同的对象。
多态的主要优势在于提供了一种灵活的方式来调用相同的方法。通过多态,开发者可以在不修改现有代码的情况下增加新的功能。由于 Python 是动态类型语言,所以任何对象只要在运行时具备所需的方法,就能够被使用。因此,Python 的多态性比其他静态类型语言更为灵活。
静态类型语言和动态类型语言的区别?
|
在 Python中,多态主要通过继承(方法重写)、鸭子类型(Duck Typing)、*args 与 **kwargs 等来实现。
1、继承(方法重写)实现多态
在 Python 中,多态通常通过继承和子类化来实现。当子类继承自父类时,子类可以重写父类的方法以提供特定的实现。简单说就是“一个指令,多种反应”,比如让不同的动物“叫”,猫会“喵”,狗会“汪” 。继承(方法重写)实现多态非常容易,它主要体现了同一个接口或方法,在不同的对象上能表现出不同的行为。

2、鸭子类型(Duck Typing)实现多态
鸭子类型源自“如果它走路像鸭子,游泳像鸭子,叫声像鸭子,那么它就是鸭子”的说法。对于动态类型语言而言,变量在使用之前不需要显式声明其数据类型,类型是在运行时根据变量的赋值来确定的。所以,即使没有明确的继承声明和定义,仍然可以实现多态性。

在鸭子类型实现多态的过程中,可以使用 Python 自带的hasattr() 函数来检查对象是否具有指定成员(属性和方法)。其语法为:
hasattr(object, name)
|
编程示例如下:

3、使用 *args 和 **kwargs 实现多态性
在 Python 中,通过使用 *args和 **kwargs,可以编写更加灵活的函数,这些函数可以接受不同类型和数量的参数(可变参数),从而实现某种程度的多态性。它主要体现了同一个方法可以处理不同的对象。

*args 和 **kwargs 是 Python 函数中用来接收任意数量参数的特殊写法,能让函数变得更灵活,不用提前限制参数个数 。简单说,*args 负责接收不定长位置参数,**kwargs 负责接收不定长带名字的关键字参数 。 |
4、其他多态实现方式
Python 面向对象编程是其语法核心,需要大家深刻学习和领悟,如果有疑问欢迎留言区讨论。