2012-03-16 2 views
6

Докшнайт python должен быть задан как буквальная строка; но иногда полезно иметь аналогичные docstrings для нескольких функций (например, разные конструкторы), или несколько методов доступа могут принимать один и тот же список аргументов (а затем полагаться на один и тот же скрытый метод), поэтому было бы неплохо использовать описание везде. Для таких случаев я могу построить docstring, назначив __doc__, что я делаю с помощью простого декоратора. Система работает очень хорошо (в python 2), и я доволен тем, насколько прост, ясен и хорошо инкапсулирован.Модификация docstring python с помощью декоратора: это хорошая идея?

Вопрос: Это хорошая идея? В частности, существуют ли инструменты, которые будут смущены этой настройкой (например, все, что извлекает docstrings из источника, а не из байт-кода). Является ли решение по-прежнему работать на python 3? Существуют ли другие причины или обстоятельства, которые сделают это нецелесообразным?

+0

"разные конструкторы"? Я предполагаю, что вы имеете в виду какие-то заводские функции, потому что у вас может быть только один '__init__'. –

+0

Я не думаю, что «заводская функция» правильная. Я имел в виду статические члены класса, которые создают экземпляр того же класса. Все они будут полиморфными конструкторами на языке, который поддерживает это напрямую. Но да, фабричные функции могут быть другим вариантом использования. – alexis

+0

Я бы назвал это своего рода фабрикой, да. На самом деле нет никакой разницы между статическими функциями-членами и свободными функциями (для использования терминологии C++), помимо пространства имен. Хотя у Python есть отдельные понятия «метод класса» и «статический метод». –

ответ

4

Он не должен нарушать каких-либо инструментов, и он должен работать на Python 3.

Это нормально Если это не повредит исходный код читаемость например, вы все еще можете выяснить, что делает эта функция и как использовать Это.

Проблема может заключаться в том, что она маскирует плохой дизайн. Если несколько методов используют один и тот же список аргументов, код должен быть реорганизован (создать объект, который работает со списком), а не исправлен путем создания повторяющихся docstrings.

+0

Спасибо! Приятно слышать. Я думаю, что дизайн в порядке: методы все называют одним и тем же методом реализации и выполняют такие функции, как возврат результатов поиска (из содержимого объекта) в разных форматах. Приятно иметь разные имена в интерфейсе для разных операций, и в любом случае существует существующий API со стандартизованными именами. Что касается docstrings, достаточно просто взглянуть на метод реализации при чтении исходного кода. Однако для интерактивной помощи необходимо документировать методы интерфейса. – alexis

+0

Открыт вопрос, потому что я надеюсь услышать больше отзывов об этом. Никакое преступление не предназначено! – alexis

Смежные вопросы