繁体   English   中英

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

[英]How to preserve a docstring of a decorated class for sphinx documentation?

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

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模块时,我能够在装饰之前生成Foo类的文档。 可能吗?

编辑:

看起来像一个类似的问题,但在这里我想要实现的是将Sphinx将看到的文档字符串传递给Wrapper实例,并根据原始的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__)

“我想保留的文档字符串。”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM