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

如何继承并强制使用__metaclass__ = ABCMeta在超类中定义的抽象方法

如何解决如何继承并强制使用__metaclass__ = ABCMeta在超类中定义的抽象方法

一个类A(在另一个包中),该类使用通过设置my_abstract_method()来定义抽象类的旧方法来定义抽象方法__Metaclass__ = ABCMeta

我的类B是A的子类,我希望B继承A的my_abstact_method(),并要求B的所有子类实现my_abstract_method()

我将如何去做?

示例:

from abc import abstractmethod,ABC,ABCMeta


class A(object):
    __Metaclass__ = ABCMeta

    @abstractmethod
    def my_abstract_method(self):
        return

class B(A,Metaclass=ABCMeta):

    pass

B()

执行后,将成功创建B()。

由于未定义A的抽象方法,如何使B()失败?

解决方法

编辑: 除了显而易见的问题之外,很难理解这里的问题是什么—以下解决方案可能或可能与实际实现相关。

下面的解决方案引入了另一层抽象,打破了“继承的解决方案不是更多的继承”的原则,但这可能是一种特殊情况,可能对您的场景有用。

from abc import abstractmethod,ABC,ABCMeta


class A(object):
    __metaclass__ = ABCMeta

    @abstractmethod
    def my_abstract_method(self):
        return


class C(A,ABC):    
    @abstractmethod
    def new_abstract_method(self):
        pass


class B(C):
    pass
    

B()

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