Явно задано строкой документации метода


Я помогаю поддерживать пакет для python под названием nxt-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)

Я хочу иметь возможность добавлять различные строки docstring к каждому из этих методов, которые он добавляет. m-это метод, возвращаемый функцией _make_poller (). Есть идеи? Есть ли какой-то способ обойти ограничение python на изменение строк документов?

2 8

2 ответа:

Для простых функций:

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"

Вы также можете использовать setattr для объекта class/function и задать строку docstring.

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