【问题标题】:How to make an Abstract Class inherit from another Abstract Class in Python?如何让一个抽象类继承自 Python 中的另一个抽象类?
【发布时间】:2018-06-28 10:22:28
【问题描述】:

是否可以让一个抽象类继承自 Python 中的另一个抽象类?

如果是这样,我应该怎么做?

【问题讨论】:

标签: python class oop abstract abc


【解决方案1】:

看看abc 模块。对于 2.7:link。对于 3.6:link 给你的简单例子:

from abc import ABC, abstractmethod

class A(ABC):
    def __init__(self, value):
        self.value = value
        super().__init__()

    @abstractmethod
    def do_something(self):
        pass


class B(A):
    @abstractmethod
    def do_something_else(self):
        pass

class C(B):
    def do_something(self):
        pass

    def do_something_else(self):
        pass

【讨论】:

  • 好的。我的 IDE (PyCharm) 抱怨我没有为 B 类中的 A 类的所有抽象方法提供实现。我想我应该忽略这些警告,或者有什么方法可以强制它识别 B 类是另一个抽象上课?
  • 如果之后需要创建实例,则需要为所有抽象方法提供实现
  • 是的。我需要为 C 类中的所有抽象方法提供实现,因为它是一个具体的类。但是,我想以 IDE 理解它是一个抽象类的方式对 B 类进行编码(就像 IDE 理解 Java 中的接口继承一样)。如果不可能,我不妨忽略警告。
  • 换句话说,我的 IDE 在您的代码中显示了 B 类警告,而 C 类则没有。
  • 不理解你的 IDE 的行为。我现在在 VS Code 上,没有看到任何警告。上面的代码对我来说就像一个魅力
【解决方案2】:
from abc import ABCMeta, abstractmethod

class OriginalAbstractclass(metaclass=ABCMeta):
    @abstractmethod
    def sample_method(self):
        pass


class InheritedAbstractClass(OriginalAbstractclass, metaclass=ABCMeta):
    @abstractmethod
    def another_method(self):
        pass

class ConcreteClass(InheritedAbstractClass):
    def some_method(self):
        pass

    def another_method(self):
        pass

【讨论】:

    猜你喜欢
    • 2012-11-15
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 2021-10-24
    • 2019-12-30
    相关资源
    最近更新 更多