多态性是OOPs的一个特点,它标志着一个名字可以有不同的功能。一个实体可以采取不同的形式。
本教程将展示多态性在Python中是如何实现的。
理解这个问题的最好方法是使用len() 函数。这个函数对不同的对象有不同的解释。
对于一个列表,它将返回存在的全部元素,对于一个字符串,将返回存在的全部字符。
代码:
lst = ['delft', 'stack']
s = 'delftstack'
print(len(lst), len(s))
输出:
2 10
另一个说明Python中多态性的常见功能是+ 操作符。这个运算符可以在Python中执行两个数字之间的加法。
然而,当与字符串一起使用时,它就像一个连接运算符,将两个字符串结合起来。
代码:
a = 5 + 6
s = 'delft' + 'stack'
print(a, s)
输出:
11 delftstack
在Python中所有的东西都是一个对象,都属于某个类。方法与类的对象相关联。
这就是为什么+ 操作符和len() 函数对不同的对象执行不同的功能。+ 操作符调用一个为不同对象定义的不同的魔法函数。
我们可以创建我们的类并实现这一点。两个类可以有相同名称的函数,但有不同的目的和不同的定义。
代码:
class A:
def fun(self):
print("Class A")
class B:
def fun(self):
print("Class B")
ob1 = A()
ob2 = B()
for i in (ob1, ob2):
i.fun()
输出:
Class A
Class B
在Python中使用方法重写实现多态性
多态性在Python中也与类的继承有关。继承是指一个类访问另一个类的特征。
一个类和它的子类可能包含同名的函数,我们可以在Python中使用函数覆盖。使用方法覆盖,我们可以在子类中实现已经定义的方法。
我们可以根据子类的情况重新定义函数。
代码:
class A:
def fun(self):
print("Class A")
class B(A):
def fun(self):
print("Class B")
ob1 = A()
ob2 = B()
for i in (ob1, ob2):
i.fun()
输出:
Class A
Class B
在上面的代码例子中,类B 继承自类A ,但是fun() 的方法在类B 中被覆盖,并且根据类来定义。
我们也可以从类A 中访问被重载的函数fun() 。
代码:
class A:
def fun(self):
print("Class A")
class B(A):
def fun(self):
A.fun(self)
print("Class B")
ob2 = B()
ob2.fun()
输出:
Class A
Class B
函数重载是一个有趣的功能,它实现了多态性。这个功能在Python中是没有的,在Python中会调用最近定义的函数。
在Python中,有可能对运算符进行重载。我们知道,不同的运算符可以根据对象的类型执行不同的功能,通过+ 运算符可以清楚地看到。
发生这种情况是因为每当使用一个运算符时,它都会在内部调用一个神奇的函数。例如,+ 运算符在内部调用了__add__ 方法。
这个神奇的函数在其名称前后都有双下划线。魔法函数不是用来直接调用的,但我们可以为不同的类定义魔法函数来修改不同运算符的行为。
代码:
class A:
def __init__(self, a):
self.a = a
def __add__(self, o):
return self.a + o.a + 2
ob1 = A(5) #Python小白学习交流群:711312441
ob2 = A(4)
print(ob1+ob2)
输出:
11
在上面的例子中,我们通过修改类A 的魔法函数来重载+ 操作符,并在结果中加入2 。