Форум сайта python.su
0
Есть ли возможность сформировать для процедуры __doc__ иначе чем литеральной строкой?
Пример. Вместо
def fun(): 'abc or xyz'
def fun(): 'abc or {}'.format('xyz')
Отредактировано kvichans (Март 21, 2013 14:35:05)
Офлайн
88
Атрибут
fun.func_doc
Офлайн
0
У меня на П3.3.0 в справке сказано, что func_doc был переименовал в __doc__.
Попытка изменить __doc__ не удалась: AttributeError: attribute ‘__doc__’ of ‘method’ objects is not writable
Я делал так
class C: def __init__(self): self.m.__doc__='other' def m(self): 'smth' c=C()
Отредактировано kvichans (Март 21, 2013 15:43:54)
Офлайн
88
Злой Гвидо… Третьего у меня нет - ничего не подскажу.
Офлайн
0
Для простых фунций получается
def fun(): 'smth' print('in fun') f=fun print(f.__doc__) # smth f.__doc__='other' print(f.__doc__) # other
Отредактировано kvichans (Март 21, 2013 15:42:46)
Офлайн
88
А.. Метод и функция - это не одно и то же, даже во втором питоне. Можно попытаться отключить функцию от класса, изменить док и подключить обратно.
Атрибут:
mymethod.im_func
Библиотечная функция:
new.instancemethod(function, instance, class)
Отредактировано Shaman (Март 21, 2013 16:00:33)
Офлайн
173
Менять нужно атрибуты unbound метода, т.е. через класс, а не экземпляр:
class C: def __init__(self): C.foo.__doc__ = "modified" def foo(self): "original" c = C() print(c.foo.__doc__) # если неизвестен класс c.__class__.foo.__doc__ = "modified again" print(c.foo.__doc__)
Офлайн
0
reclosedev Спасибо
Офлайн