多态与多态性
作者:互联网
多态
多态指的是一类事物有很多种形态
比如:文件有很多种形态
import abc class File(metaclass=abc.ABCMeta): #同一类事物:文件 @abc.abstractmethod def click(self): pass class Text(File): #文件的形态之一:文本文件 def click(self): print('open file') class ExeFile(File): #文件的形态之二:可执行文件 def click(self): print('execute file')
多态性
1、概念
多态性是指在不考虑实例类型的情况下使用实例
2、分类
多态性分为静态多态性和动态多态性
3、静态多态性
如任何类型都可以用运算符+进行运算
4、动态多态性
import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstractmethod def talk(self): pass class People(Animal): #动物的形态之一:人 def talk(self): print('say hello') class Dog(Animal): #动物的形态之二:狗 def talk(self): print('say wangwang') class Pig(Animal): #动物的形态之三:猪 def talk(self): print('say aoao')
peo=People() dog=Dog() pig=Pig() #peo、dog、pig都是动物,只要是动物肯定有talk方法 #于是我们可以不用考虑它们三者的具体是什么类型,而直接使用 peo.talk() dog.talk() pig.talk() #更进一步,我们可以定义一个统一的接口来使用 def func(obj): obj.talk()
5、多态性的好处
1、增加程序的灵活性
2、增加程序的可扩展性
6、多态练习
class Pig(): def speak(self): print('哼哼哼') class Dog(): def speak(self): print('汪汪汪') class Txt(): def speak(self): print('Txt') obj = People() obj1 = Pig() obj2 = Dog() obj3 = Txt() # 多态带来的特性:在不用考虑对象数据类型的情况下,直接调用对应的函数 def animal(animal): return animal.speak() animal(obj) animal(obj1) animal(obj2) animal(obj3) # 父类限制子类的行为 class Animal(): def speak(self): raise Exception("必须实现speak方法")
7、其实大家一直在享受着多态性带来的好处,比如Python的序列类型有多种形态:字符串,列表,元组,多态性体现如下
#str,list,tuple都是序列类型 s=str('hello') l=list([1,2,3]) t=tuple((4,5,6)) #我们可以在不考虑三者类型的前提下使用s,l,t s.__len__() l.__len__() t.__len__() len(s) len(l) len(t)
抽象类
抽象类只能被继承,不能被实例化
class Animal(metaclass=abc.ABCMeta): @abc.abstractmethod # 该方法已经是抽象方法了 def speak(self): pass @abc.abstractmethod def login(self):pass class People(Animal): def speak(self): # print('嗷嗷嗷') pass def login(self): pass class Pig(Animal): def speak(self): print('哼哼哼') class Dog(Animal): def speak(self): print('汪汪汪') obj = People() obj.speak()
标签:多态性,self,多态,print,class,def,speak 来源: https://www.cnblogs.com/zhaoyuanshi/p/15650293.html