0

我有一个“部分”类,它的功能需要一些 mixin(出于性能和简单性的原因,我想通过继承来实现)。我可以声明我的班级需要新方法吗?

显然以下猜测不起作用(“无法实例化抽象类”):

from abc import abstractmethod, ABCMeta

class A(metaclass=ABCMeta):
    @abstractmethod
    def a(self):
        pass

class B:
    def a(self):
        return 12

class C(A, B):
    pass

c = C()

这里A试图声明它的其他方法需要a()工作。(Python 3)

对声明有什么建议吗?

4

1 回答 1

1

您需要在继承顺序中放在B前面A才能使其工作:

>>> from abc import abstractmethod, ABCMeta

>>> class A:
...     __metaclass__=ABCMeta
...     @abstractmethod
...     def a(self):
...         pass

>>> class B:
...     def a(self):
...         return 12

>>> class C(B,A):
...     pass

>>> c = C()
>>> c
<__main__.C object at 0x10e9c40d0>


>>> class D:
...     pass

>>> class E(D, A):
...     pass

>>> e = E()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: Can't instantiate abstract class E with abstract methods a
于 2012-11-09T10:19:02.753 回答