python- 类的多态与多态性
多态
多态指的是一类事物有多种形态——如:动物有多种形态:人、狗、猪。
多态性
指在不考虑实例类型的情况下使用实例,多态性分为静态多态性和动态多态性。
静态多态性——任何类型都可以用运算符【+】进行运算。
eg:字符串+字符串;数字+数字;列表+列表。我们在使用【+】号时也没有考虑类型
动态多态性如下:
# 动态多态性 import abc class Animal(metaclass=abc.ABCMeta): @abc.abstractmethod def eat(self): pass @abc.abstractmethod def run(self): pass class Dog(Animal): def eat(self): print('is eatting' ) def run(self): print('is running') class Pig(Animal): def eat(self): print('is eatting') def run(self): print('is running') dog1 = Dog() pig1 = Pig() dog1.eat() pig1.eat() # dog、pig 都是动物,只要是动物都有eat run方法 # 于是我们可以不用考虑它们的具体是什么类型,而直接使用 #更进一步,我们可以定义一个统一的接口来使用 def func(obj): obj.eat() func(dog1)
动态多态性的意思是我们在使用对象的时候不需要考虑类的类型。
多态性的好处:
1、增加程序的灵活性
使用者都是同一种形式去调用,如func(obj)
2、增加了程序的额外可扩展性
通过Animal类创建了一个新的类,使用者不需要修改自己原有的代码,还是用func(obj)去调用。
import abc class Animal(metaclass=abc.ABCMeta): @abc.abstractmethod def eat(self): pass @abc.abstractmethod def run(self): pass @abc.abstractmethod def talk(self): pass class Dog(Animal): def eat(self): print('is eatting' ) def run(self): print('is running') def talk(self): print('wawa') class Pig(Animal): def eat(self): print('is eatting') def run(self): print('is running') def talk(self): print('pipi') class Cat(Animal): def eat(self): print('is eatting' ) def run(self): print('is running') def talk(self): print('maomao') dog1 = Dog() pig1 = Pig() cat1 = Cat() dog1.eat() pig1.eat() cat1.talk() # dog、pig 都是动物,只要是动物都有eat run方法 # 于是我们可以不用考虑它们的具体是什么类型,而直接使用 #更进一步,我们可以定义一个统一的接口来使用 def func(obj): obj.eat() func(cat1)
鸭子类型
python 崇尚鸭子类型,即‘如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子’