Python 显式设置方法的docstring

Python 显式设置方法的docstring,python,nxt,Python,Nxt,我帮助维护一个名为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 o

我帮助维护一个名为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)
def f():  # for demonstration
    pass

f.__doc__ = "Docstring!"
help(f)
我希望能够向它添加的每个方法添加不同的docstring。m是由_make_poller()返回的方法。有什么想法吗?有没有办法绕过python对更改docstring的限制?

对于普通函数:

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)
def f():  # for demonstration
    pass

f.__doc__ = "Docstring!"
help(f)
这适用于python2和python3中定义了docstring和未定义docstring的函数。您也可以执行
+=
。注意,它是
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

对于方法,您需要使用方法的
\uuu func\uu
属性:

class MyClass(object):

    def myMethod(self):
        pass

MyClass.myMethod.__func__.__doc__ = "A really cool method"
您还可以在类/函数对象上使用并设置docstring

setattr(foo,'__doc__',"""My Doc string""")

我在一个类方法上尝试了这个方法,但得到了一个错误。事实证明,在一个类方法上,我认为这是原始问题想要的,你会想做:self.method.\uuu func.\uu doc.\uu你也可以将它传递到
dict
参数中的
Meta
构造函数中,作为
Meta(cls,name,base,dict={“uu doc”:“docstring”)
或调用
dict.update({“uu doc”)“docstring”“”})
在您的
super
调用之前。现在您至少有4个选项。