Что такое хороший способ реализовать что-то похожее на интерфейс в Python?

Каков хороший способ реализовать что-то похожее на интерфейс Delphi / C # или абстрактный класс в Python? Класс, который заставит все его подклассы реализовать определенный набор методов?

Самый простой способ сделать это – использовать абстрактную реализацию базового класса, которая была включена в Python с версии 2.7.

Это позволяет вам классифицировать базовый класс как абстрактный с помощью метакласса abc.ABCMeta . Затем вы можете пометить методы и свойства как абстрактные. Когда вы создаете экземпляр класса с метаклассом 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> >>> 

Проверка выполняется только тогда, когда класс создается, потому что совершенно законно иметь подкласс, который реализует только некоторые абстрактные методы и поэтому сам является абстрактным классом.