Pdoc 仅按约定提取公共 API 成员(不带下划线前缀)。
您可以在模块级别上覆盖此行为,方法是定义__all__
,或者更一般地,通过在__pdoc__
dict中指定覆盖,或者手动为几个成员,或者自动但hackish,有点像:
# 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__']