抽象基本クラスに関するpython docsを読みました:
ここ から:
abc.abstractmethod(function)
抽象メソッドを示すデコレータ。このデコレータを使用するには、クラスのメタクラスが
ABCMeta
またはそれから派生している必要があります。ABCMeta
から派生したメタクラスを持つクラスは、そのすべての抽象メソッドとプロパティがオーバーライドされない限りインスタンス化できません。
そして ここ
@abstractmethod
実装する必要があるdraw()などのメソッドへのデコレータ。 Pythonは、メソッドを定義していないクラスに対して例外を発生させます。例外は、メソッドを持たないサブクラスのインスタンスを実際に作成しようとしたときにのみ発生することに注意してください。
私はこのコードを使用してそれをテストしました:
import abc
class AbstractClass(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def abstractMethod(self):
return
class ConcreteClass(AbstractClass):
def __init__(self):
self.me = "me"
c = ConcreteClass()
c.abstractMethod()
コードは問題なく動作するので、取得できません。 c.abstractMethod
取得:
<bound method ConcreteClass.abstractMethod of <__main__.ConcreteClass object at 0x7f694da1c3d0>>
ここで何が欠けていますか? ConcreteClass
must抽象メソッドを実装する必要がありますが、例外は発生しません。
そのコードを実行するためにpython3を使用していますか?はいの場合、メタクラスをpython 3 変更あり で宣言することを知っておく必要があります。代わりに次のように行う必要があります。
import abc
class AbstractClass(metaclass=abc.ABCMeta):
@abc.abstractmethod
def abstractMethod(self):
return