Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为sphinx文档保存装饰类的docstring?_Python_Python Sphinx_Python Decorators_Docstring - Fatal编程技术网

Python 如何为sphinx文档保存装饰类的docstring?

Python 如何为sphinx文档保存装饰类的docstring?,python,python-sphinx,python-decorators,docstring,Python,Python Sphinx,Python Decorators,Docstring,我有一个装饰器,它具有包装类的嵌套定义。 包装器将其包装的原始类作为属性进行维护。 玩具示例如下所示: def装饰器(cls): 类包装器(对象): 原始=cls 定义初始化(自): self.\uuuuuu文件\uuuuuu=self.original.\uuuuuu文件__ self.\uuuuu name\uuuuu=self.original.\uuuuu name__ 用cls(cls)定义做某事: 通过 返回包装器 现在我想在另一个模块中用这个装饰器装饰Foo类,并在装饰之前为Fo

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

def装饰器(cls): 类包装器(对象): 原始=cls 定义初始化(自): self.\uuuuuu文件\uuuuuu=self.original.\uuuuuu文件__ self.\uuuuu name\uuuuu=self.original.\uuuuu name__ 用cls(cls)定义做某事: 通过 返回包装器 现在我想在另一个模块中用这个装饰器装饰
Foo
类,并在装饰之前为
Foo
类生成sphinx文档。看起来是这样的:

from.bar导入装饰器
@装饰师
类Foo(对象):
“”“我要保留的文档字符串。”“”
定义初始化(自):
通过
我试图通过使用
autoclass
功能来实现这一点,但没有成功。我想做的是创建一个类实例并获取其docstring:

.. autoclass:: package.baz.Foo()
   :members:
但是它在
package.baz.Foo
class:
package.bar.decorator..Wrapper的别名的html文档中返回了这个

我希望在编写
baz
模块的文档时,能够在对Foo类进行装饰之前生成Foo类的文档。可能吗

编辑:

看起来像是一个类似的问题,但这里我想实现的是将Sphinx将看到的docstring传递给
包装器
实例,并基于原始
Foo
docstring生成文档,或者我将能够调用
包装器.original
并制作文档,但以下几点没有解决:

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

如果
@wrapps
不起作用,您可以手动更新
\uuuuuuuuuuuuuuuuuuuuuu

做一些类似于:

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__)
'我要保留的文档字符串。'


使用这两种解决方案的可能副本将不起作用,因为:1。包装与作为参数2传递的类不兼容。我在这里用定义包装器类的函数来装饰整个类。在附加的问题中,有一个类装饰了函数。也许我错过了什么?你是我的英雄!我不知道为什么我没有弄明白我需要在类定义之外指定它,并且做了相同的事情,但是在初始化阶段。。。非常感谢,非常好用!