多态: 可以对不同类型的对象执行相同的操作,该操作的结果将根据对象类型而异。最常见的例子之一是+运算符,数值型变量、list变量和string变量都支持 ‘+’ 加法操作,但是结果却不同,这就是一种多态。
来看看自定义的类如何支持 '+'
class A:
def __init__(self,lst):
self.var = lst
def __add__(self, y):
return [self.var[0]+y.var[0], self.var[1], y.var[1]]
def __radd__(self, y):
return [self.var[0]+y.var[0], self.var[1], y.var[1]]
a = A([1, 2])
b = A([100,200])
print(a+b)
[101, 2, 200]
上述代码实现了一种奇怪的加法,其中__add__(self, y)和__radd__(self, y)是加法协议要求实现的方法,分别是对左加和右加的支持。上述定义的类并没有显式地继承哪个父类(可以用className.__bases__查看),但是也实现了多态,这是因为python多态是基于对象的行为。
鸭子类型与协议
鸭子类型: 如果走起来像是鸭子,叫起来像鸭子(协议要求),那么它就是鸭子,而不要求它是鸭子夫妇生的(继承