Python装饰的类文档

问题描述 投票:0回答:2

我正在使用装饰器处理python中的单例,如下所示。

我希望装饰类的pydoc与非装饰类的pydoc完全相同,但我不知道怎么做:

  • 没有getSingletonInstance.__doc__ = cls.__doc__行,修饰类的pydoc给出singleton函数的pydoc。

  • 使用getSingletonInstance.__doc__ = cls.__doc__行,修饰类的pydoc仅提供“顶级”文档字符串。

我该如何进行?

谢谢。

def singleton(cls):
    """A singleton decorator

    Warnings
    --------
    Singleton gdecorated calsses cannot be inhehited

    Example
    -------
    >>> from decorators import singleton
    >>> @singleton
    ... class SingletonDemo():
    ...     pass
    >>> d1 = SingletonDemo()
    >>> d1.a = 0xCAFE
    >>> d2 = SingletonDemo()
    >>> id(d1) == id(d2)
    True
    >>> d1 == d2
    True
    >>> d2.a == 0xCAFE
    True

    References
    ----------
    See case 2 of https://www.python.org/dev/peps/pep-0318/#examples
    """
    _instances = {}

    def getSingletonInstance():
        if cls not in _instances:
            _instances[cls] = cls()
        return _instances[cls]

    getSingletonInstance.__doc__ = cls.__doc__

    return getSingletonInstance
python python-3.x decorator docstring
2个回答
0
投票

尝试使用functools.wraps


0
投票

答案以示例总结了所有讨论。非常感谢大家。

© www.soinside.com 2019 - 2024. All rights reserved.