2

PythonでDelphi/C#インターフェースまたは抽象クラスに似たものを実装するための良い方法は何ですか?すべてのサブクラスに特定のメソッドのセットを実装するように強制するクラス?

4

1 に答える 1

5

これを行う最も簡単な方法は、バージョン2.7以降にPythonに含まれている抽象基本クラスの実装を使用することです。

abc.ABCMetaこれにより、メタクラスを使用して基本クラスを抽象としてマークできます。次に、メソッドとプロパティを抽象としてマークできます。メタクラス(またはそのサブクラスのいずれか)を使用してクラスをインスタンス化するときに、インスタンスでABCMeta抽象プロパティまたはメソッドが未定義のままである場合、例外がスローされます。

例えば

>>> from abc import ABCMeta, abstractmethod
>>> class Foo(object):
    __metaclass__ = ABCMeta
    @abstractmethod
    def bar(self): pass


>>> class BadFoo(Foo):
    pass

>>> BadFoo()

Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    BadFoo()
TypeError: Can't instantiate abstract class BadFoo with abstract methods bar
>>> class GoodFoo(Foo):
    def bar(self):
        return 42


>>> GoodFoo()
<__main__.GoodFoo object at 0x027354B0>
>>> 

チェックは、クラスがインスタンス化されたときにのみ実行されます。これは、一部の抽象メソッドのみを実装し、それ自体が抽象クラスであるサブクラスを持つことは完全に正当であるためです。

于 2013-01-07T12:42:06.230 に答える