如何为所有类方法添加常量字符串到__doc__?

时间:2013-12-03 17:30:07

标签: python documentation docstring

我的代码如下:

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

我怎么做?

2 个答案:

答案 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