pythonnxt

Explicitly set docstring of a method


I help to maintain a package for python called nxt-python. It uses metaclasses to define the methods of a control object. Here's the method that defines the available functions:

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)

I want to be able to add a different docstring to each of these methods that it adds. m is a method returned by _make_poller(). Any ideas? Is there some way to work around the python restriction on changing docstrings?


Solution

  • For plain functions:

    def f():  # for demonstration
        pass
    
    f.__doc__ = "Docstring!"
    help(f)
    

    This works in both python2 and python3, on functions with and without docstrings defined. You can also do +=. Note that it is __doc__ and not __docs__.

    For methods, you need to use the __func__ attribute of the method:

    class MyClass(object):
    
        def myMethod(self):
            pass
    
    MyClass.myMethod.__func__.__doc__ = "A really cool method"