我正在使用装饰器处理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
尝试使用functools.wraps
:
答案以示例总结了所有讨论。非常感谢大家。