0

機能のためにミックスインを必要とする「部分的な」クラスがあります(パフォーマンスと単純さの理由から、継承を使用して実行したいと思います)。クラスに新しいメソッドが必要になることを宣言できますか?

どうやら次の推測は機能しません(「抽象クラスをインスタンス化できません」):

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 に答える