我有一个“部分”类需要一些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)
对声明的任何建议?
答案 0 :(得分: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