Tekst używany do "pomocy" jest w rzeczywistości atrybutem "__doc__
" obiektu. Chodzi o to, że w zależności od posiadanego obiektu, nie można po prostu ustawić na nim atrybutu __doc__
.
Jeśli to, co potrzebne jest „help(object.attr)
” do pracy (a nie help(object)
pokazuje wszystkie możliwe atrybuty) jest to nieco łatwiejsze - powinieneś dostać tylko SHURE że cokolwiek __getattr__
powraca temat Hae prawidłowo ustawiony docstring.
ponieważ „to nie działa” Przypuszczam wracasz wewnętrzne Wyniki niektórych wywołania funkcji, jak w tym fragmencie:
def __getattr__(self, attr):
if attr == "foo":
#function "foo" returns an integer
return foo()
...
Jeśli po prostu wróci funkcję „foo” się, bez wywoływania go, itrs docstring będzie wyświetlany normalnie.
Co można zrobić, jest owinięcie wartości zwracanej w __getattr__
jako obiekt dynamicznie utworzonej klasy wich zawiera prawidłowe docstring - tak, spróbuj użyć somethong tak:
def __getattr__(self, attr):
if attr == "foo":
#function "foo" returns an (whatever object)
result = foo()
res_type = type(result)
wrapper_dict = res_type.__dict__.copy()
wrapper_dict["__doc__"] = foo.__doc__ #(or "<desired documentation for this attribute>")
new_type = type(res_type.__name__, (res_type,), wrapper_dict)
# I will leave it as an "exercise for the reader" if the
# constructor of the returned object can't take an object
# of the same instance (python native data types, like int, float, list, can)
new_result = new_type(result)
elif ...:
...
return new_result
to powinno działać - chyba Mylę się z motywem, dlaczego Hel nie działa w pierwszej kolejności - jeśli tak jest, proszę podać przykład tego, co powracasz z __getattr__
.
Thannks, działa w moim przypadku. Wszystkie attr w __getattr__ zwraca rodzime typy danych python. –