版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/c_first/article/details/81843796
多态指的是一类事物有多种形态
水有多种形态:冰、水蒸气
动物:人、骆驼、猪
序列类型:字符串、列表、元组
多态依赖于继承:一个抽象类有多个子类
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('say wangwang')
class Pig(Animal): #动物的形态之三:猪
def talk(self):
print('say aoao')
多态的作用
字符串、元组、列表都是序列,都有长度
于是我们可以不用考虑它们三者的具体是什么类型,而直接使用len()
只要属于同一类事物,那么就能使用相同的方法
s = "shuai"
t = (1,2,3)
l = [6,7,8]
print(s.__len__()) # 5
print(t.__len__()) # 3
print(l.__len__()) # 3
def get_len(obj):
return len(obj)
get_len(s) #5
get_len(t) #3
get_len(l) #3
peo=People()
dog=Dog()
pig=Pig()
#peo、dog、pig都是动物,只要是动物肯定有talk方法
#于是我们可以不用考虑它们三者的具体是什么类型,而直接使用
peo.talk()
dog.talk()
pig.talk()
# 可以定义一个统一的接口来使用
def talk(obj):
obj.talk()
talk(peo)
talk(dog)
talk(pig)