一、何为多态?
多态就是指一个事物有多种形态
文件有多种形态:文本文件,可执行文件等
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.增加了程序的可扩展性:通过继承类创建了一个新的类,使用者不需要更改自己的代码,还是用之前的func函数去调用
class Cat(Animal): #属于动物的另外一种形态:猫
def talk(self):
print('say miao')
def func(animal): #对于使用者来说,自己的代码根本无需改动
animal.talk()
cat1=Cat() #实例出一只猫
func(cat1) #甚至连调用方式也无需改变,就能调用猫的talk功能
say miao
这样我们新增了一个形态Cat,由Cat类产生的实例cat1,使用者可以在完全不需要修改自己代码的情况下。使用和人、狗、猪一样的方式调用cat1的talk方法,即func(cat1)
四、鸭子类型
python崇尚鸭子类型,如果看起来像鸭子,叫声像鸭子,而且走路也像鸭子,那么他就是鸭子
程序员通常根据这种行为来编写程序。比如:如果想编写现有对象的自定义版本,就可以继承该对象
也可以创建一个外观和行为相像,但是与行为没有任何关系的全新对象,后者通常用于保存程序组件的松耦合度
#二者都像鸭子,二者看起来都像文件,因而就可以当文件一样去用
class TxtFile:
def read(self):
pass
def write(self):
pass
class DiskFile:
def read(self):
pass
def write(self):
pass