Python中的多态是什么? 用例子解释多态性

已发表: 2021-03-05

目录

介绍

Python 是一种高级、解释性和开源的编程语言。 它在许多程序员和开发人员中获得了很多关注,因为它支持有助于许多任务的库,例如探索性数据分析、GUI 编程等。此外,python 编程非常有趣。

我们将在本文中讨论 python 的一个有趣的特性。 所以让我们开始吧!

什么是多态性?

多态性这个词来源于希腊词 poly(意思是许多)和态射(形式)。 这意味着单个函数名或方法名可以有多种形式。 这满足了在实现中避免代码重复的愿望。

但是python中的多态性与其他编程语言中的多态性有点不同。 像 java 和 c++ 这样的编程语言支持编译时多态(方法重载)。 在方法重载中,多个方法可以具有相同的方法名称,但参数签名不同。 python不支持此功能。 如果多个方法具有相同的功能,则最新的功能实现将覆盖较早的功能实现。

函数多态

python中的函数多态可以分为用户自定义多态和预定义多态两种。

我们可以实现用户定义的多态性来调用具有不同参数签名的同一个函数,这可以认为是对python中方法重载不可用的一点补偿。 让我们来看一个示例代码

def mul (a,b,c= 1 ):
返回a*b*c;

打印( mul ( 1,2,3 ) )
打印(mul 1,2

在上面的代码中,即使传递的参数数量不相等,两个打印语句都引用相同的方法。 在第二个函数调用中,参数 c 被赋予默认值 1。

同样,python 中很少有预定义的方法表现出多态性特征,其中单个方法可以接受不同数据类型的参数。 像 len() 这样的方法展示了这个特性。 这是说明这一点的代码。

打印(len([ 1 , 2 , 3 , 4 ]))
打印(len(( 1 , 2 , 3 , 4 )))
打印(len( “python” ))
print(len({ “key1” : “value1” , “key2” : “value2” }))

在上面的代码中,相同的 len() 方法用于列表、元组、字符串和字典。

结帐:现实世界中的 Python 应用程序

运算符重载

像“+”这样的运算符可以以多种方式使用。 例如,它可以用于添加两个数字、字符串以及列表等。下面是演示的代码。

l1=[ 1 , 2 , 3 ]
l2=[ 3 , 4 , 5 ]

n1= 2
n2= 3

s1= “嘿”
s2= “那里”

打印(l+l1)
打印(s1+s2)
打印(n1+n2)

方法覆盖

方法覆盖也被认为是运行时多态性,它被 java、c++ 和 python 等许多语言支持。

这个特性与继承有关,python中的子类从其父类继承成员函数和成员变量。 而如果我们觉得父类方法的实现不相关,那么我们可以在子类中重写那个方法。 并且根据子类的要求修改成员函数称为方法覆盖。

two_wheeler
def燃料(自身):
打印( “两轮车需要燃料才能运行”
默认容量(自我):
print( “自行车最多可容纳 2 人” )

电动自行车(双轮车):
def燃料(自身):
打印( “电动自行车靠电池运行”
汽油自行车( two_wheeler ):
def燃料(自身):
打印( “汽油自行车运行汽油”
自行车=two_wheeler()
电动自行车=电动自行车()
pbike=汽油自行车()

自行车.燃料()
自行车.容量()
ebike.fuel()
ebike.容量()
pbike.fuel()
pbike.容量()

在上面的代码中,two_wheeler 是父类,而electric_bike、petrol_bike 是子类。 子类electric_bike 和petrol_bike 继承了fuel()、capacity() 方法。 现在,如果需要,我们可以更新方法的实现,并且在electric_bike 类中我们重新实现了fuel() 方法,类似地在petal_bike 类中重新实现了fuel() 方法。

例如,在代码中 ebike.fuel() 打印“电动自行车使用电池运行”,pbike.fuel() 打印汽油自行车使用汽油运行”。

类方法中的多态性

Python 允许不同的类具有相同的方法名,这属于多态特性。 而方法的调用是基于我们用来调用方法的对象。

自行车
def燃料(自身):
print( “自行车不需要任何燃料!” )
默认容量(自我):
print( “自行车适合单人骑行” )

电动自行车
def燃料(自身):
打印( “电动自行车靠电池运行”
默认容量(自我):
打印( “电动自行车最多可容纳 2 人”

汽油自行车
def燃料(自身):
打印( “汽油自行车运行汽油”
默认容量(自我):
打印( “汽油自行车最多可容纳 2 人”

生态自行车=自行车()
电动自行车=电动自行车()
pbike=汽油自行车()
l = [生态自行车,电动自行车,pbike]

对于lobj
obj.fuel()
obj.容量()

在上面的代码中,我们创建了自行车、电动自行车和汽油自行车三个类的三个对象。 并且所有三个类都具有相同的方法名称。 现在,编译器的任务是根据用于调用方法的对象类型来决定必须调用哪个方法。

例如,ecobike.fuel() 将调用bike 类的fuel() 方法,而ebike.fuel() 将调用electric_bike 类的fuel() 方法。 我们将所有这些对象附加到一个列表中,并且在每次迭代中,我们将调用相同的函数名称,但调用该方法的对象类型将发生变化。 在第一次迭代中调用了bike 类的方法,并在进一步迭代中调用了electric_bike、petrol_bike 的方法。

阅读: Python 项目理念和主题

结论

在本文中,我们了解了多态的含义,讨论了 Python 在方法重载的情况下有何不同。 演示了 Python 中多态性的各种可能性,例如运算符重载、函数多态性、方法覆盖和类方法中的多态性。

现在您已经了解了 python 中的多态性,使用所有这些功能实现您的下一个 python 代码!

如果您想了解数据科学,请查看 IIIT-B 和 upGrad 的数据科学 PG 文凭,该文凭专为在职专业人士而设,提供 10 多个案例研究和项目、实用的实践研讨会、与行业专家的指导、1-与行业导师面对面交流,400 多个小时的学习和顶级公司的工作协助。

为未来的职业做准备

升级和 IIIT-BANGALORE 的数据科学 PG 文凭
现在注册@升级