Modulo inspect

Francesc Alted falted en openlc.org
Mie Dic 3 19:48:01 CET 2003


A Dimecres 03 Desembre 2003 18:55, Garito va escriure:
> Hola a todos
>
> Estoy trasteando esto del python un poquillo, concretamente estoy centrado
> en los mecanismos de reflexion de las clases
>
> Necesito poder saber via codigo los miembros de las clases
>
> Para ello uso el modulo inspect que trae una funcion llamada getmembers con
> la que obtienes un listado de los miembros de un objeto/modulo etc. El
> formato es este
>
> inspect.getmembers(objeto, predicado)
>
> Si no se indica el predicado getmembers te devuelve todos los miembros (con
> sus valores)
>
> Si se indica el predicado ismethod se devuelven los metodos, isfunction
> para las funciones, etc
>
> Lo que no veo/encuentro es como devolver los atributos de la class Alguien
> sabe como hacer esto?

Pues buena pregunta... Parece ser que no hay nada que enn Python que indique
que un atributo es tal, por la simple razón de que todos los objetos que
culegan de la clase (i.e. existen en el diccionario clase.__dir__) se
consideran tales.

Asi que parece que la única manera va a ser descubrirlos por eliminación. El
problema es que hay que hacer unos cuantos filtros para eliminar candidatos
"no deseados". Yo he hecho a uno pequeño a modo de ejemplo, pero se deberia
completar un poco más. Ahi va:

[x for x in dir(object) 
    if (not inspect.ismethod(getattr(a,x)) and
        not inspect.isclass(getattr(a,x)) and
        not x.startswith("__")) ]

Espero que sirva de ayuda.

-- 
Francesc Alted




Más información sobre la lista de distribución Python-es