Python中的抽象基类与标准库中的abc模块

默认情况下,Python解析器不强制检查对抽象类的继承,即抽象类的子类可能没有实现其中的抽象方法,但是Python并不会报错。
为了避免这种情况,从Python 3.4/2.6开始,Python标准库中提供了abc模块(Abstract Base Classes),为定义Python的抽象基类提供了公共基础。
事实上,Python标准库中的numbers模块和collections模块都是abc模块的典型应用。


1. abc模块的组成

  • class ABCMeta(type) #创建抽象基类的元类,abc模块的核心
def __new__(mcls, name, bases, namespace, **kwargs)
def register(cls, MySubClass)     #为MySubClass注册一个虚拟的子类名
def _dump_registry(cls, file=None)
def __instancecheck__(cls, instance)
def __subclasscheck__(cls, subclass)
  • class ABC(metaclass=ABCMeta) #方便使用ABCMeta的辅助类,推荐使用
  • def get_cache_token() #返回当前抽象基类的缓存的token
  • def abstractmethod(funcobj) #修饰抽象函数
  • class abstractclassmethod(classmethod) #Python 3.3开始过时了,内置classmethod()函数的子类
  • class abstractstaticmethod(staticmethod) #Python 3.3开始过时了,内置staticmethod()函数的子类
  • class abstractproperty(property) #Python 3.3开始过时了,内置property()函数的子类
2. 应用示例

from abc import ABC, abstractmethod


class MyAbstractClass(ABC):
	@abstractmethod
    	def myabstractmethod(self):
                raise NotImplementedError

class MyConcreteA(MyAbstractClass):
    pass

class MyConcreteB(MyAbstractClass):
    def myabstractmethod(self):
    	return


参考链接:

https://docs.python.org/3/library/abc.html
https://github.com/python/cpython/tree/3.6/Lib/abc.py

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值