8

我帮助维护一个名为 nxt-python 的 python 包。它使用元类来定义控制对象的方法。这是定义可用函数的方法:

class _Meta(type):
    'Metaclass which adds one method for each telegram opcode'

    def __init__(cls, name, bases, dict):
        super(_Meta, cls).__init__(name, bases, dict)
        for opcode in OPCODES:
            poll_func, parse_func = OPCODES[opcode]
            m = _make_poller(opcode, poll_func, parse_func)
            setattr(cls, poll_func.__name__, m)

我希望能够为它添加的每个方法添加不同的文档字符串。m 是 _make_poller() 返回的方法。有任何想法吗?有没有办法解决python对更改文档字符串的限制?

4

2 回答 2

17

对于普通函数:

def f():  # for demonstration
    pass

f.__doc__ = "Docstring!"
help(f)

这适用于 python2 和 python3,适用于定义和未定义文档字符串的函数。你也可以这样做+=。请注意,它是__doc__而不是__docs__

对于方法,需要使用__func__方法的属性:

class MyClass(object):

    def myMethod(self):
        pass

MyClass.myMethod.__func__.__doc__ = "A really cool method"
于 2011-05-09T00:40:55.657 回答
3

您也可以在类/函数对象上使用setattr并设置文档字符串。

setattr(foo,'__doc__',"""My Doc string""")
于 2011-05-09T02:00:21.013 回答