#python #python-3.x #pdoc
#python #python-3.x #pdoc
Вопрос:
Я пытаюсь создать документацию для моего проекта python с pdoc
помощью модуля, следуя этой статье .
Я заметил, что все классы, методы и т.д., начинающиеся с __
(частные / защищенные), отсутствуют в сгенерированной документации.
Это sample.py
class __Members:
def __test():
pass
class seedoc:
''' see me '''
pass
Вот как я сгенерировал документацию с помощью pdoc
$pdoc --html sample.py
html/sample.html
Я вижу только общедоступный класс в сгенерированной документации согласно этому снимку экрана:
Может кто-нибудь, пожалуйста, помочь мне найти способ преодолеть это ограничение и сгенерировать документацию со всеми частными / защищенными участниками? Заранее спасибо.
Ответ №1:
Pdoc извлекает только общедоступные члены API (без префикса подчеркивания) по соглашению.
Вы можете переопределить это поведение на уровне модуля, определив __all__
или, в более общем смысле, указав переопределения в __pdoc__
dict, либо вручную для нескольких членов, либо автоматически, но хакерски, что-то вроде:
# Specified at the end of each module that contains private
# classes/methods that need to be exposed
__pdoc__ = {name: True
for name, klass in globals().items()
if name.startswith('_') and isinstance(klass, type)}
__pdoc__.update({f'{name}.{member}': True
for name, klass in globals().items()
if isinstance(klass, type)
for member in klass.__dict__.keys()
if member not in {'__module__', '__dict__',
'__weakref__', '__doc__'}})
В качестве альтернативы вам следует просто переименовать своих участников, если они являются частью вашего общедоступного API.
Также обратите внимание, что Python по умолчанию определяет десятки элементов dunder для объектов, большинство из которых имеют стандартное значение или являются внутренними:
>>> class Cls:
... pass
>>> dir(Cls)
['__class__',
'__delattr__',
'__dict__',
'__dir__',
'__doc__',
'__eq__',
'__format__',
'__ge__',
'__getattribute__',
'__gt__',
'__hash__',
'__init__',
'__init_subclass__',
'__le__',
'__lt__',
'__module__',
'__ne__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'__weakref__']