Python面向对象特性 - 多态
2019-02-01 19:51
465 查看
Python中的多态
多态
多态指的是一类事物有多种形态。多态的实现需要依赖于继承~
import abc class File(metaclass=abc.ABCMeta): @abc.abstractmethod def read(self): pass @abc.abstractmethod def write(self): pass class Txt(File): # 文本数据的读写 def read(self): print('读取文本数据') def write(self): print('写入文本数据') class Process(File): # 进程数据的读写 def read(self): print('读取进程数据') def write(self): print('写入进程数据') txt = Txt() process = Process() txt.read() process.read()
上述示例中,Txt,Process都继承自 接口类File,且都实现了 read,write方法,但read,write方法的实现都各不相同。Txt,Process为同一类事物,不同的形态体现在它们都有read,write方法,但是实现的方式都不一样~
多态性
多态性是多态的一种应用:在不考虑实例类型的情况下使用实例。使用的场景往往是:调用不同对象的同名方法,不同的对象会用不同的方式来实现类似的功能;
调用者无需关心对象之间的差异性,只需根据不同的场景调用不同对象的同名方法即可~
def read(obj): obj.read() def write(obj): obj.write() read(txt) read(process) write(txt) write(process)
Txt,Process类中的read,write方法是应对不同的场景实现数据的读取和写入,所以在使用函数read,write时候只需要根据场景选择对象即可~
鸭子类型
关于列表和元组的示例:
m_lst = [1, 2, 3] m_tuple = ('a', 'b', 'c', 'd') print(m_lst.__len__()) # 3 print(m_tuple.__len__()) # 4 print(m_lst.count(1)) # 1 print(m_tuple.count('c')) # 1
通过源码可以看到 list 和 tuple 都是继承自 object 类,相互之间没有关系,但是它们都有很多功能类似的同名方法。这就是Python崇尚的鸭子类型,两个类之间有很多的相似之处,功能也类似,但是这两个类之间没有继承关系,也不是继承于同一个接口类或者抽象类,而是两个独立的类,这就保证了程序组件的松耦合度~
例如上述的Txt,Process类也可以通过这种方式来实现:
class Txt(): # 文本数据的读写 def read(self): print('读取文本数据') def write(self): print('写入文本数据') class Process(): # 进程数据的读写 def read(self): print('读取进程数据') def write(self): print('写入进程数据')
.................^_^
相关文章推荐
- 面向对象三大特性之一 多态
- Java面向对象特性--多态
- Python 面向对象(创建类和对象,面向对象的三大特性是指:封装、继承和多态,多态性)
- java面向对象特性-封装、继承和多态
- 面向对象三大特性之多态(polymorphism)
- Python面向对象特性,走向类
- 黑马程序员----面向对象设计的封装、继承、多态特性
- Python中的面向对象特性(更新中……)
- oc面向对象特性: 多态
- Java(6):面向对象四大基本特性:多态
- .NET面向对象特性之多态
- 面向对象语言三大特性之多态
- 面向对象的三大特性(封装、继承和多态)
- 黑马程序员------oc之面向对象特性 封装、多态、继承等
- 【java基础】--(1)面向对象特性之多态
- 面向对象语言特性之多态
- 黑马程序员—java面向对象总结(3)—面向对象继承、多态特性
- Python面向对象特性 - 继承
- python入门(二十九):面向对象之多态
- 面向对象三大特性——封装、继承、多态