【发布时间】:2014-05-08 12:52:19
【问题描述】:
我有一些装饰器函数,它们在执行它们装饰的函数之前/之后执行附加代码。我想做的是动态记录装饰函数文档字符串的附加行为。我已经使用functools.wrap 保留了名称和此类属性。
这是我想做的一个简化示例:
numbers_added = []
def record_number(func):
decorator_doc = '''\nRecord added numbers in numbers_added'''
def add_and_record(n):
r = func(n)
if r is not False:
numbers_added.append(n)
return r
add_and_record.__doc__ = func.__doc__ + decorator_doc
return add_and_record
@record_number
def add2_to_even(n):
'''Add 2 to an even number, `n`.
If n is not even, return False'''
if n % 2 == 0:
return n + 2
return False
现在,这里的一切都很好,并且文档字符串已成功更新,那么我的问题是什么?如果您查看help(add2_to_even),您会发现文档字符串的第二行格式不正确。通常任何前导缩进都会被剥离,但在这种情况下会被保留。我可以做些什么来保持预期的格式?
注意:在 Python 文档字符串约定 (PEP 257) 中有一个算法实现,但我宁愿不使用类似的东西并重新实现核心功能。
【问题讨论】:
标签: python documentation decorator python-decorators