多态
1.多态和多态性
多态:指同一种事物的多种形态。比如水,可以是水蒸汽、雪、雨等多种形态。
多态性:指的是可以在不考虑对象的类型的情况下而直接使用对象。
(1).例子一
s1 = "hello " s2 = "world" d1 = 500 d2 = 20 print(s1 + s2) # hello world print(d1 + d2) # 520
站在"+"的角度去看,它并不关心左右两边操作数的类型。所以它是多态的一种表现形式,其实我们见到的有很多。
(2).例子二
# 多态:同一类事物的多种形态 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')
# 多态性:指的是可以在不考虑对象的类型的情况下而直接使用对象 peo1 = People() dog1 = Dog() pig1 = Pig() # 不用关心对象的类型 # peo1.talk() # dog1.talk() # pig1.talk() # 实现一种接口 def func(animal): animal.talk() # 不用关心参数的类型 func(peo1) func(pig1) func(dog1)
2. 鸭子类型
解释:“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”,
我们并不关心对象是什么类型,到底是不是鸭子,只关心行为。python崇尚的就是它。
#序列类型:列表list,元组tuple,字符串str l=list([1,2,3]) t=tuple(('a','b','c')) s=str('hello') # 不关注类型,只关注它是如何实现行为的 # print(l.__len__()) # print(t.__len__()) # print(s.__len__()) # def len(obj): # return obj.__len__() # 不关注对象的类型,只要它依据 '鸭子类型' 像序列,那它就是序列。所以len()的参数并不关心其类型 print(len(l)) # 3 print(len(t)) # 3 print(len(s)) # 5