【发布时间】:2018-09-18 14:18:42
【问题描述】:
我正在尝试创建一个在类中调用的装饰器,它会从该类中提取属性,并使用这些类属性来编辑函数的文档字符串。
我的问题是我找到了编辑函数文档字符串的装饰器示例(将函数的 __doc__ 属性设置为新字符串),并且我还找到了从父类中提取属性的装饰器示例(通过将self 传递给装饰器),但我还没有找到能够同时实现这两种功能的装饰器示例。
我尝试将这两个示例结合起来,但它不起作用:
def my_decorator(func):
def wrapper(self, *args, **kwargs):
name = func.__name__ # pull function name
cls = self.__class__.__name__ # pull class name
func.__doc__ = "{} is new for the function {} in class {}".format(
str(func.__doc__), name, cls) # set them to docstring
return func(self, *args, **kwargs)
return wrapper
class Test():
@my_decorator
def example(self, examplearg=1):
"""Docstring"""
pass
有了这个,我希望下面会返回“Docstring is now new for the function: example”:
Test().example.__doc__
相反,它返回None。
编辑:请注意,我对如何具体访问类的名称不感兴趣,而是对如何访问一般的类属性感兴趣(这里使用self.__class__.__name__ 作为示例)。
【问题讨论】:
标签: python decorator docstring