Я читал о различии виртуальных и абстрактных методов. Это хорошо задокументировано. Разница между виртуальными и абстрактными методами
Виртуальные методы имеют реализацию и предоставляют производным классам возможность переопределения.
Абстрактные методы не предоставляют реализация и заставить производные классы переопределять метод.
Итак, абстрактные методы не содержат фактического кода в них, и подклассы ДОЛЖНЫ переопределять метод.
На основании этих операторов, похоже, что методы, украшенные abc.abstractmethod
, должны иметь без реализации , только либо pass
, ...
(используется в abc
документах ), либо raise NotImplementedError
.
Кажется, программисты обычно используют abc.abstractmethod
для реализации виртуальной функции, где переопределение является обязательным. Это можно увидеть во многих местах:
Однако, похоже, go против само определение шаблона проектирования для абстрактных методов, не имеющих тела.
Этот ответ дает хорошее представление о предмете.
Мое наблюдение - это виртуальное против абстрактного метода проектирования шаблон в настоящее время свободно используется в Python.
Может кто-нибудь пролить свет на это? Какова лучшая практика?