Проблема: У меня есть класс, который содержит метод шаблона execute
, который вызывает другой метод _execute
. Предполагается, что подклассы перезаписывают _execute
для реализации определенных функций. Эта функциональность должна быть документирована в docstring _execute
. Продвинутые пользователи могут создавать свои собственные подклассы для расширения библиотеки. Однако другой пользователь, имеющий дело с таким подклассом, должен использовать только execute
, поэтому он не увидит правильную docstring, если он использует help(execute)
.Использование docstring из одного метода для автоматической перезаписывания другого метода
Поэтому было бы неплохо изменить базовый класс таким образом, чтобы в подклассе docstring execute
автоматически заменялся номером _execute
. Любые идеи, как это можно сделать?
Я думал о метаклассах, чтобы сделать это, чтобы сделать это полностью прозрачным для пользователя.
Есть ли веская причина, почему docstring для выполнения не может просто читать «делает ... а затем вызывает _execute, какие подклассы, как ожидается, будут переопределены, посмотрите на документацию для _execute для деталей "? Это похоже на самый Pythonic подход, если ожидается, что пользователи будут предоставлять базовые классы. – 2008-09-16 14:41:23
Это просто неправильно, если пользователь вводит help (o.execute), он делает a) не получает информацию, которую он, вероятно, хотел, и b) ему предлагается посмотреть на какой-то сомнительный метод _execute, возможно, он даже не знал, что существует. Для наивного пользователя библиотеки это слишком много деталей реализации. – nikow 2008-09-27 17:27:49