Próbuję się upewnić, że wykonanie help()
w Pythonie 2.7 REPL wyświetla __doc__
dla funkcji, która została opakowana w functools.partial
. Aktualnie działająca help()
na "funkcji" functools.partial
wyświetla __doc__
z klasy functools.partial
, a nie mojej funkcji zapakowanej __doc__
. Czy istnieje sposób, aby to osiągnąć?Pozwól, aby pomoc() działała na obiekt funkcji częściowej
Rozważmy następujące callables:
def foo(a):
"""My function"""
pass
partial_foo = functools.partial(foo, 2)
Running help(foo)
spowoduje pokazując foo.__doc__
. Jednak uruchomienie help(partial_foo)
powoduje, że __doc__
z Partial object.
Moim pierwszym podejściem było użycie functools.update_wrapper, które poprawnie zastępuje obiekt częściowy __doc__
z foo.__doc__
. Jednak to nie rozwiązuje problemu z powodu tego, jak pydoc.
mam zbadane kod pydoc, a problem wydaje się, że partial_foo
jest rzeczywiście Partial object nie typowa funkcja/wymagalne, zobacz this question uzyskać więcej informacji o tym szczegółowo.
Domyślnie, pydoc wyświetli __doc__
typu obiektu, a nie instancji, jeśli obiekt, który został przekazany, zostanie określony jako klasa przez inspect.isclass. Zobacz render_doc function, aby uzyskać więcej informacji na temat samego kodu.
Tak więc, w moim scenariuszu powyżej pydoc wyświetla pomoc typu: functools.partial
NOT __doc__
z mojej instancji .
Czy mimo to, aby zmienić moje wezwanie do help()
lub functools.partial
instancji, który jest przekazywany do help()
tak, że będzie wyświetlać __doc__
instancji, nie wpisać?
Nie sądzę, aby to obejść; nie ma tu haków, które moglibyśmy złapać. –