В Python вы обычно избегаете использования таких абстрактных методов вообще. Вы определяете интерфейс с помощью документации и просто предполагаете, что переданные объекты выполняют этот интерфейс («типизирование утки»).
Если вы действительно хотите определить абстрактный базовый класс с помощью абстрактных методов, это можно сделать с помощью модуля abc
:
from abc import ABCMeta, abstractmethod
class Abstract(metaclass=ABCMeta):
def use_concrete_implementation(self):
print(self._concrete_method())
@abstractmethod
def _concrete_method(self):
pass
class Concrete(Abstract):
def _concrete_method(self):
return 2 * 3
Опять же, это не обычный способ Python делать вещи. Одна из основных целей модуля abc
состояла в том, чтобы ввести механизм для перегрузки isinstance()
, но проверки isinstance()
обычно избегают в пользу типизации утки. Используйте его, если вам это нужно, но не как общий шаблон для определения интерфейсов.