面向对象之多态

Posted on 2019-03-02 10:49  杜卡迪S11  阅读(81)  评论(0编辑  收藏  举报

一、何为多态?

多态就是指一个事物有多种形态

文件有多种形态:文本文件,可执行文件等

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