Modulo inspect
luis miguel morillas
morillas en posta.unizar.es
Mie Dic 3 21:15:06 CET 2003
Asunto: Re: [Python-es] Modulo inspect
Fecha: mié, dic 03, 2003 at 07:48:01 +0100
Citando a Francesc Alted (falted en openlc.org):
> 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("__")) ]
>
>
No sé si es lo que buscas, yo a veces he utilizado:
[x for x in dir(objeto) if not callable(getattr(objeto, x))]
Es decir, extraego lo que no son métodos, funciones, clases ...
--
Luis Miguel
Más información sobre la lista de distribución Python-es