はい、ABC (Abstract Base Class)A
として定義することにより:
from abc import ABCMeta, abstractmethod
class A(object):
__metaclass__ = ABCMeta
@abstractmethod
def do_some_cool_stuff():
''' To override '''
pass
def do_some_boring_stuff():
return 2 + 2
をサブクラス化できますが、メソッドに具体的な実装があるA
場合にのみ、そのようなサブクラスのインスタンスを作成できます。do_some_cool_stuff()
>>> from abc import ABCMeta, abstractmethod
>>> class A(object):
... __metaclass__ = ABCMeta
... @abstractmethod
... def do_some_cool_stuff():
... ''' To override '''
... pass
... def do_some_boring_stuff():
... return 2 + 2
...
>>> class B(A):
... def do_stuff():
... return 4
...
>>> B()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't instantiate abstract class B with abstract methods do_some_cool_stuff