簡體   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