Python面向对象特性 - 多态

Python中的多态

多态

多态指的是一类事物有多种形态。多态的实现须要依赖于继承~ide

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方法,可是实现的方式都不同~函数

多态性

多态性是多态的一种应用:在不考虑实例类型的状况下使用实例。使用的场景每每是:调用不一样对象的同名方法,不一样的对象会用不一样的方式来实现相似的功能;
 
调用者无需关心对象之间的差别性,只需根据不一样的场景调用不一样对象的同名方法便可~code

def read(obj):
    obj.read()

def write(obj):
    obj.write()

read(txt)
read(process)

write(txt)
write(process)

Txt,Process类中的read,write方法是应对不一样的场景实现数据的读取和写入,因此在使用函数read,write时候只须要根据场景选择对象便可~对象

鸭子类型

关于列表和元组的示例:blog

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

Python面向对象特性 - 多态

Python面向对象特性 - 多态

 
经过源码能够看到 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('写入进程数据')

.................^_^接口

相关文章
相关标签/搜索