什么是虚拟子类,抽象基类的原理

本文探讨了Python中的抽象基类(ABC),强调它们在类型检测中的作用,类似于C++的虚基类。通过`@abc.abstractmethod`装饰器注册抽象方法,子类必须实现这些方法。Python的鸭子类型允许不同类实现相同协议即可视为同类。同时,介绍了两种继承抽象基类的方式,一种强制子类实现所有协议,另一种允许不实现抽象方法。最后,展示了如何查看类的子类和MRO(Method Resolution Order)。
摘要由CSDN通过智能技术生成

测试样本取自 <流畅的python>

  1. 先来了解抽象基类
import abc

class Tombole(abc.ABC):

    @abc.abstractmethod
    def pick(self):
        '''
        随机删除元素,然后将其返回
        '''

    @abc.abstractmethod
    def load(self, iterable):
        '''
        从可迭代对象中添加元素
        :param iterable:
        :return:
        '''

    def inspect(self):
        '''
        :return:返回一个有序数组,有当前元素构成
        '''
        items = []
        while True:
            try:
                items.append(self.pick())
            except LookupError:
                break
            self.load(items)
        return tuple(sorted(items))

    def loaded(self):
        return bool(self.inspect())

抽象基类自定义要继承 abc.ABC, 因为此模块中有 抽象基类注册的类属性.
@abc.abstractmethod 是注册抽象方法,不用实现方法,后续的子类会执行检查实现. 若没有实现则会报错, 可以与其他装饰器叠加,前提是 @abc.abstractmethod 必须在最内层
抽象类的意思本人理解是为 isinstance( ) issubclass(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值