第十一章、面向对象之多态、多态性
一、多态
多态指的是一类事物有多种形态
动物有多种形态:人、狗、猪
class Animal(): #同一类事物:动物
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')
文件有多种形态:文本文件、可执行文件
class File(): #同一类事物:文件
def click(self):
pass
class Text(File): #文件的形态之一:文本文件
def click(self):
print('open file')
class ExeFile(File): #文件的形态之二:可执行文件
def click(self):
print('execute file')
二、多态性
在面向对象方法中一般是这样表示多态性:向不同的对象发送同一条消息(obj.func():是调用了obj的方法func,又称为向obj发送了一条消息func),不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数
def func(obj):
obj.talk()
-----------------------
pig=Pig()
func(pig)
-----------------------
#结果是
say aoao
三、为什么要用多态性(多态性的好处)
-
增加了程序的灵活性
-
增加了程序拓展性
四、鸭子类型
**Python崇尚鸭子类型,即‘如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子’ **
#二者都像鸭子,二者看起来都像文件,因而就可以当文件一样去用
class TxtFile:
def read(self):
pass
def write(self):
pass
class DiskFile:
def read(self):
pass
def write(self):
pass