多态就是同一类事物的多种形态。
python对传入参数的数据类型没有限制,因此,只要是同一类的(比如序列),都可以用一些方法。
比如序列:字符串、列表、元组
都有一些方法:obj.__len__、 切片。那么对于字符串 s, 列表 l,元组 t,都可以通过len(s)、len(l)、len(t) 来获取长度。
上面是内置函数的,下面的栗子我们来自定义一类事物及其多种形态:
import abc
class Animal(metaclass=abc.ABCMeta): # 定义一类事物
@abc.abstractmethod
def talk(self):
pass
class People(Animal): # 事物的具体形态
def talk(self):
print('say hello')
class Dog(Animal): # 事物的具体形态
def talk(self):
print('wang wang...')
def talk(obj): # 模仿内置函数的效果
return obj.talk()
alex = People()
black = Dog()
talk(alex)
talk(black)
上面不同功能的函数使用相同的函数名(People有talk,Dog有talk,但是具体的实现不一样),这样就可以用一个函数名调用不同功能的函数。这就是多态性。