Python нарушает ли абстрактный метод, содержащий непустое тело, предполагаемый шаблон виртуального / абстрактного дизайна? - PullRequest
0 голосов
/ 02 мая 2020

Я читал о различии виртуальных и абстрактных методов. Это хорошо задокументировано. Разница между виртуальными и абстрактными методами

Виртуальные методы имеют реализацию и предоставляют производным классам возможность переопределения.

Абстрактные методы не предоставляют реализация и заставить производные классы переопределять метод.

Итак, абстрактные методы не содержат фактического кода в них, и подклассы ДОЛЖНЫ переопределять метод.

На основании этих операторов, похоже, что методы, украшенные abc.abstractmethod, должны иметь без реализации , только либо pass, ... (используется в abc документах ), либо raise NotImplementedError.


Кажется, программисты обычно используют abc.abstractmethod для реализации виртуальной функции, где переопределение является обязательным. Это можно увидеть во многих местах:

Однако, похоже, go против само определение шаблона проектирования для абстрактных методов, не имеющих тела.

Этот ответ дает хорошее представление о предмете.


Мое наблюдение - это виртуальное против абстрактного метода проектирования шаблон в настоящее время свободно используется в Python.

Может кто-нибудь пролить свет на это? Какова лучшая практика?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...