Day30.多态和鸭子类型
1.多态和鸭子类型_为何要有多态和多态流程说明
# todo 2. 为何要有多态==》 多态会带来什么样的特性,多态性 # todo 多态性指的是可以在不考虑对象具体类型的情况下,而直接使用对象 class Animal: # ? 父类做了统一子类的方法 def say(self): print('动物基本的发声频率。。。', end=' ') class People(Animal): def say(self): super().say() print('嘤') class Dog(Animal): def say(self): super().say() print('汪') class Pig(Animal): def say(self): super().say() print('哼') obj1 = People() obj2 = Dog() obj3 = Pig() # todo 说明:obj1进入类People,类People下存在say函数,进入say函数下执行,执行super.say()进入类People继承的父类, # todo 并调用父类下的say()方法,打印父类下的`动物基本的发声频率。。。`, 然后再打印类People下的`嘤` # todo 流程:类People下的say()方法----->super.say()进入父类Animal调用其下的say()方法----->打印父类Animal # todo 中say()下的内容`动物基本的发声频率。。。`-----> 最后打印类People()中say()方法下的打印内容`嘤` # obj1.say() # obj2.say() # obj3.say() # todo 根据对象,定义统一的接口,接收传入的动物对象 def animal_say(animal): animal.say() print('\n', '根据对象,定义统一的接口,接收传入的动物对象'.center(40, '=')) animal_say(obj1) animal_say(obj2) animal_say(obj3)
2.多态和鸭子类型_len方法统一接口方法
# todo len方法统一接口 print('len方法非统一接口'.center(40, '-')) print('hello'.__len__()) print([1, 2, 3].__len__()) print({'a':1, 'b':2}.__len__()) print('') def my_len(val): return val.__len__() print('len方法统一接口'.center(40, '-')) print(my_len('hello')) print(my_len([1, 2, 3])) print(my_len({'a':1, 'b':2}))
3.多态和鸭子类型_鸭子类型是让毫无相关性的类,做的像一点
# todo python推崇的是鸭子类型, 让毫无相关性的类,做的像一点 class Cpu: def read(self): print('cpu read') def write(self): print('cpu write') class Mem: def read(self): print('mem read') def write(self): print('mem write') class Txt: def read(self): print('txt read') def write(self): print('txt write') obj1 = Cpu() obj2 = Mem() obj3 = Txt() obj1.read() obj1.write() obj2.read() obj2.write() obj3.read() obj3.write()