1、什么是多态:多态指的是同一种/类事物的不同形态(父类对象的多种(子类对象)状态)
2、为什么要使用多态?
# 多态性:在多套的背景下,可以不用考虑对象的具体类型的前提下直接使用对象
# 多态性的精髓:统一
3、如何使用多态
1 imort abc 2 class People(metaclass=abc.ABCMeta): 3 def __init__(self, name): 4 self.name = name 5 6 @abc.abstractmethod 7 def speak(self): pass 8 9 class Chinese(People): 10 def speak(self): 11 print('说中国话') 12 13 class England(People): 14 def speak(self): 15 print('说英国话') 16 17 18 if __name__ == '__main__': 19 # 多态的体现:功能或是需求,需要父类的对象,可以传入父类对象或任意子类对象均可以 20 # 注:一般都是规定需要父类对象,传入子类对象 21 def ask_someone(obj): 22 print('让%s上台演讲' % obj.name) # 父类提供,自己直接继承 23 obj.speak() # 父类提供,只不过子类重写了 24 25 ch = Chinese('王大锤') 26 en = England('Tom') 27 28 ask_someone(ch) 29 ask_someone(en) 30 31
鸭子类型
1、规定有什么属性及什么方法的类的类型叫鸭子类型
2、能提供出规定的属性与方法的对象就是鸭子
1 class Disk: 2 def read(self): 3 print('Disk read') 4 5 def write(self): 6 print('Disk write') 7 8 9 class Memory: 10 def read(self): 11 print('Mem read') 12 13 def write(self): 14 print('Mem write') 15 16 17 class Cpu: 18 def read(self): 19 print('Cpu read') 20 21 def write(self): 22 print('Cpu write') 23 24 25 obj1=Disk() 26 obj2=Memory() 27 obj3=Cpu() 28 29 obj1.read() 30 obj2.read() 31 obj3.read()