Явно установить строку документации метода - PullRequest
8 голосов
/ 09 мая 2011

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

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

Ответы [ 2 ]

17 голосов
/ 09 мая 2011

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

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"
2 голосов
/ 09 мая 2011

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

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