面向对象-多态与多态性
多态:同一种事物的多种形态,比如动物有,人,狗,猪。
多态性:不考虑实例类型的情况下直接使用实例
好处:
- 以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal)
- 增加程序可扩展性
动态多态性:
import abc #给以下动物创建父类,只定义方法名,不写功能 class Animal(metaclass=abc.ABCMeta): #装饰器规定子类必须有该属性 @abc.abstractmethod def talk(self): pass class People(Animal): #重写父类方法 def talk(self): print('say hello') class Pig(Animal): def talk(self): print('say wangwang') class Dog: def talk(self): print('say aoao') #实例化 peop1=People() pig=Pig() dog1=Dog() #不考虑对象类型,直接使用实例 peop1.talk() pig.talk() dog1.talk()
创建接口,以不变应万变
#实例化 peop1=People() pig=Pig() dog1=Dog() #创建接口,接口内部无需考虑对象类型 def func(animal): animal.talk() #调用接口即可 func(peop1) func(pig) func(dog1)
静态多态性,如字符串操作方法'+'
python提倡使用“鸭子类型”,即看着像鸭子,不一定要继承父类
class File: def read(self): pass def write(self): pass #创建Disk类型,创建得像File类型 class Disk: def read(self): print('disk read') def write(self): print('disk write') #创建Text类型,创建得像File类型 class Text: def read(self): print('text read') def write(self): print('text write') disk=Disk() text=Text() #使用方法就行File对象一样,read(),write() disk.read() disk.write() text.read() text.write()