Документирование с помощью методов Python Sphinx, которые имеют параметры по умолчанию с объектами дозорного? - PullRequest
3 голосов
/ 08 августа 2011

Если вы хотите, чтобы люди могли вызывать некоторые методы, используя None, вы должны использовать объект sentinel при определении метода.

 _sentinel = object()
 def foo(param1=_sentinel):
     ...

Это позволит вам позвонить foo(param1=None) и иметь возможность различать вызовы, подобные foo().

Проблема заключается в том, что когда Sphinx документирует метод, оннапишет что-то вроде

mymodule.foo(param1=<object object at 0x108c1a520>)

Как я могу убедить Sphinx иметь удобный для пользователя вывод этих функций?

Примечание. Представьте себе, как выглядят документы, если у вас есть 3-4 параметра, использующихдозорный подход.

Ответы [ 3 ]

1 голос
/ 09 августа 2011

Это можно сделать, указав сигнатуру функции в директиве autodoc вручную, например:

.. automodule:: pymorphy.contrib.tokenizers

    .. autofunction:: extract_tokens(foo, bar)

    .. autofunction:: extract_words
1 голос
/ 08 августа 2011

Я не думаю, что можно убедить Сфинкса быть более "дружелюбным", если у вас есть страж, который создает объект вне функции. Расширение Sphinx 'autodoc импортирует модуль , что означает выполнение кода уровня модуля.

Вы уверены, что не можете использовать что-то подобное?

def foo(param1=None):
    if param1 == None:
        param1 = whatever you want...
    else:
         ... 
0 голосов
/ 05 мая 2018

Часть <object object at 0x108c1a520> созданной сигнатуры метода может быть изменена путем переопределения метода __repr__ объекта-стража.

_sentinel = type('_sentinel', (object,),
                 {'__repr__': lambda self: '_sentinel'})()

Сфинкс будет отображаться как-то так:

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