Il testo utilizzato per "help" è effettivamente l'attributo "__doc__
" di un oggetto. La questione è che, a seconda dell'oggetto che hai, non puoi semplicemente impostare l'attributo __doc__
su di esso.
Se quello che vi serve è "help(object.attr)
" al lavoro (e non che help(object)
vi mostra tutti i possibili attributi) è un po 'più facile - si dovrebbe ottenere solo shure che qualunque __getattr__
rendimenti non hae un docstring impostato correttamente.
dal momento che "non sta funzionando" Direi che si sta restituendo i risultati interne di alcuni chiamata di funzione, come in questo frammento:
def __getattr__(self, attr):
if attr == "foo":
#function "foo" returns an integer
return foo()
...
Se semplicemente vuoi restituire la funzione "foo" in sé, senza chiamarlo, itś docstring verrebbe visualizzato normalmente.
Cosa si può fare è quello di avvolgere il valore di ritorno in __getattr__
come oggetto di un wich classe creata dinamicamente contiene una docstring corretta - così, provare a utilizzare somethong come questo:
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
Questo dovrebbe funzionare - a meno che Ho sbagliato il motivo per cui hel non funziona in primo luogo - se questo è il caso, si prega di dare qualche esempio di ciò che si sta restituendo da __getattr__
.
Thannks, funziona nel mio caso. Tutti attr in __getattr__ restituisce tipi di dati nativi di python. –