如何为 sphinx 文档保留装饰 class 的文档字符串?
How to preserve a docstring of a decorated class for sphinx documentation?
我有一个装饰器,它具有包装的嵌套定义 class。
包装器将其包装的原始 class 作为属性维护。
玩具示例如下所示:
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
class 并在装饰之前为 Foo
class 生成 sphinx 文档。看起来像这样:
from .bar import decorator
@decorator
class Foo(object):
"""The docstring I want to preserve."""
def __init__(self):
pass
我试图通过使用 autoclass
功能来实现这一点,但没有成功。我想做的是创建一个 class 实例并获取其文档字符串:
.. autoclass:: package.baz.Foo()
:members:
但它在 package.baz.Foo
class 的 html 文档中返回了这个:alias of package.bar.decorator.<locals>.Wrapper
我想实现这一点,当我记录 baz
模块时,我能够在 Foo class 修饰之前生成一个文档。可能吗?
编辑:
This 看起来像一个类似的问题,但在这里我想要实现的是将 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__)
'The docstring I want to preserve.'
我有一个装饰器,它具有包装的嵌套定义 class。 包装器将其包装的原始 class 作为属性维护。 玩具示例如下所示:
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
class 并在装饰之前为 Foo
class 生成 sphinx 文档。看起来像这样:
from .bar import decorator
@decorator
class Foo(object):
"""The docstring I want to preserve."""
def __init__(self):
pass
我试图通过使用 autoclass
功能来实现这一点,但没有成功。我想做的是创建一个 class 实例并获取其文档字符串:
.. autoclass:: package.baz.Foo()
:members:
但它在 package.baz.Foo
class 的 html 文档中返回了这个:alias of package.bar.decorator.<locals>.Wrapper
我想实现这一点,当我记录 baz
模块时,我能够在 Foo class 修饰之前生成一个文档。可能吗?
编辑:
This 看起来像一个类似的问题,但在这里我想要实现的是将 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__)
'The docstring I want to preserve.'