48----多态

版权声明:本文为博主原创文章,未经博主允许不得转载。 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)

猜你喜欢

转载自blog.csdn.net/c_first/article/details/81843796
48