El texto que se usa para "ayuda" es de hecho el atributo "__doc__
" de un objeto. La cuestión es que, dependiendo del objeto que tenga, simplemente no puede establecer el atributo __doc__
en él.
Si lo que necesita es "help(object.attr)
" para trabajar (y no es que help(object)
que muestra todos los atributos posibles) que es un poco más fácil - sólo se debe conseguir que todo lo Shure __getattr__
retornos no hae una cadena de documentación establecido correctamente.
ya que "no está funcionando" supongo que va a devolver los resultados internos de alguna llamada de función, como en este fragmento:
def __getattr__(self, attr):
if attr == "foo":
#function "foo" returns an integer
return foo()
...
Si sólo tendría que devolver la función "foo" en sí, sin llamarlo, itś docstring se mostraría normalmente.
Lo que se puede hacer es envolver el valor de retorno en __getattr__
como un objeto de un wich clase creada dinámicamente contiene una cadena de documentación adecuada -, intente utilizar más somethong así:
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
Esto debería funcionar - a menos Me equivoqué con el motivo por el que hel no funciona en primer lugar. Si ese es el caso, por favor, den un ejemplo de lo que está devolviendo al __getattr__
.
Thannks, funciona en mi caso. All attr in __getattr__ devuelve tipos de datos nativos de python. –