python基础(abc类)

abc

ABC是Abstract Base Class的缩写。
Python本身不提供抽象类和接口机制,要想实现抽象类,可以借助abc模块。
abc类中常见的方法有:ABCMeta,abstractmethod,classmethod

abc.ABCMeta

这是用来生成抽象基础类的元类。由它生成的类可以被直接继承。

具体化抽象类的方法有两种:

通过注册(register)

通过继承

通过注册进行具体化抽象类

from abc import ABCMeta
#生成实现类
class Foo:
    def __getitem__(self, index):
        ...
    def __len__(self):
        ...
    def get_iterator(self):
        return iter(self)
#生成基类,
class MyIterable(metaclass=ABCMeta):
    #我是一个虚拟方法
    @abstractmethod
    def __iter__(self):
        while False:
            yield None

    def get_iterator(self):
        return self.__iter__()

    @classmethod
    def __subclasshook__(cls, C):
        if cls is MyIterable:
            if any("__iter__" in B.__dict__ for B in C.__mro__):
                return True
        return NotImplemented
#将实现类注册到虚拟类中
MyIterable.register(Foo)

通过继承具体化抽象类

#构建抽象类
class PluginBase(metaclass= abc.ABCMeta):
    #__metaclass__ = abc.ABCMeta
    
    @abc.abstractmethod
    def load(self, input):
        """Retrieve data from the input source and return an object."""
        return
    
    @abc.abstractmethod
    def save(self, output, data):
        """Save the data object to the output."""
        return
 #构建具体类,其继承了抽象类,实现了抽象类的方法       
class SubclassImplementation(PluginBase):
    
    def load(self, input):
        return input.read()
    
    def save(self, output, data):
        return output.write(data)
 #判断是否真的实现了继承
if __name__ == '__main__':
    print 'Subclass:', issubclass(SubclassImplementation, PluginBase)
    print 'Instance:', isinstance(SubclassImplementation(), PluginBase)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,014评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,780评论 18 399
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,144评论 0 62
  • 没有文字,只是看看
    为醉醇香也醉风月阅读 177评论 0 1
  • “乔恩!你跟进的方案怎么到现在还没提交?!”“乔恩,今晚必须把月度工作表提交给渠道领导! 不管做到几点!”时针...
    白小藿阅读 315评论 0 4