微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python中有没有AbstractSubClass这样的东西? 背景问题

如何解决python中有没有AbstractSubClass这样的东西? 背景问题

背景

在 python 中,如果你定义了一个需要覆盖其方法的抽象基类,你会这样做:

from abc import ABC,abstractmethod

class MyAbstractClass(ABC):
    @abstractmethod
    def my_method(self):
        pass

以下代码将失败,因为它没有实现 my_method

class MyConcreteClass(MyAbstractClass):
    pass

但是如果我想定义一个mixin类的方法要求怎么办

class MyMixin:

    def my_mixin_method(self):
        self.a_required_method()

以下代码有效:

class MyBase:
    def a_required_method(self):
        pass

class MyFull(MyMixin,MyBase):
    pass

以下代码也有效...

class MydubIoUs(MyMixin):
    pass

但是在运行时暴露了一个错误

MyFull().my_mixin_method() # Works
MydubIoUs().my_mixin_method()  # Runtime error

问题

有没有像 AbstractBaseClass 这样的东西可以添加到 Mixin 类中,以确保派生类不能被实例化,除非它正确继承?

我认为一个不错的 API 应该是这样的:

from asc import ASC,requiredmethod

class MyRobustMixin(ASC):
    @requiredmethod
    def a_required_method(self):
        pass

    def my_mixin_method(self):
        self.a_required_method()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。