gpt4 book ai didi

python - 如何为 sphinx 文档保留装饰类的文档字符串?

转载 作者:太空宇宙 更新时间:2023-11-03 15:34:35 25 4
gpt4 key购买 nike

我有一个装饰器,它有包装类的嵌套定义。包装器将其包装的原始类作为属性维护。玩具示例如下所示:

def decorator(cls):
class Wrapper(object):
original = cls

def __init__(self):
self.__doc__ = self.original.__doc__
self.__name__ = self.original.__name__

def do_something_with_cls(cls):
pass

return Wrapper

现在我想装饰 Foo在另一个模块中使用此装饰器进行分类,并为 Foo 生成 sphinx 文档在装饰之前上课。它看起来像这样:

from .bar import decorator


@decorator
class Foo(object):
"""The docstring I want to preserve."""
def __init__(self):
pass

我试图通过使用 autoclass 来实现这一点功能,但没有成功。我想做的是创建一个类实例并获取它的文档字符串:

.. autoclass:: package.baz.Foo()
:members:

但它在 package.baz.Foo 的 html 文档中返回了这个类别:alias of package.bar.decorator.<locals>.Wrapper

我想在记录 baz 时实现这一目标module 我能够在 Foo 类的装饰之前生成一个文档。可能吗?

编辑:

This看起来像一个类似的问题,但在这里我想要实现的是传递给 Wrapper实例 Sphinx 将看到的文档字符串,并根据原始文档生成文档 Foo文档字符串,否则我将能够调用 Wrapper.original并为此制作文档,但以下内容没有解决:

.. autoclass package.baz.Foo.original
:members:

最佳答案

如果 @wraps 不工作,您可以手动更新 __doc__

做类似的事情:

def decorator(cls):
class Wrapper(object):
original = cls

def __init__(self):
self.__doc__ = self.original.__doc__
self.__name__ = self.original.__name__

def do_something_with_cls(cls):
pass

Wrapper.__doc__ = cls.__doc__
return Wrapper


@decorator
class Foo(object):
"""The docstring I want to preserve."""
def __init__(self):
pass


print(Foo.__doc__)

'The docstring I want to preserve.'

关于python - 如何为 sphinx 文档保留装饰类的文档字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55638987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com