面向对象——多态和多态性

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()
原文地址:https://www.cnblogs.com/king-home/p/10778618.html