我的代码如下:
constString = """
Default docstring info:
1
2
3"""
class A():
def A1():
"""
First unique docstring.
"""
pass
def A2():
"""
Second unique docstring.
"""
pass
B = A()
print(B.A1.__doc__)
如果我运行此代码,我会重新输出输出:
First unique docstring.
Second unique docstring.
但是我想通过为类A中的所有方法添加constString来替换方法的docstring。输出必须如下所示:
First unique docstring.
Default docstring info:
1
2
3
Second unique docstring.
Default docstring info:
1
2
3
我怎么做?
答案 0 :(得分:5)
功能文档字符串是可写的;只需分配给function.__doc__
;这是一个装饰器,它将一个字符串添加到类的所有方法的docstring中:
import inspect
def add_documentation(doc):
if not doc.startswith('\n'):
doc = '\n' + doc
def decorator(cls):
for func in filter(inspect.isfunction, vars(cls).values()):
func.__doc__ += doc
return cls
return decorator
像这样使用:
@add_documentation(constString)
class A:
def A1(self):
"""
First unique docstring.
"""
pass
def A2(self):
"""
Second unique docstring.
"""
pass
装饰器在Python 2和3中都有效,只会影响直接在类上定义的方法,而不会影响任何基类。
答案 1 :(得分:2)
instancemethod的docstring取自底层函数,这就是B.A1.__doc__ += constString
不起作用的原因。但是:
B.A1.__func__.__doc__ += constString