lista de atributos

Chema Cortes pych3m4 en gmail.com
Vie Feb 2 22:56:04 CET 2007


El 2007/2/2, Daniel Jimenez <dani.berzas en gmail.com> escribió:

> una pregunta un poco chorras,
> ¿como se le pregunta a una instancia que atributos tiene?.
> Creo que una forma es dir(instancia), pero no se si hay otra.

No te creas, no es tan chorra la pregunta.

Con dir() se obtiene lo que comúnmente se denomina "espacio de
nombres" de un objeto. Normalmente, se obtiene el diccionario del
objeto, el diccionario de su clase y, recursivamente, los diccionarios
del resto de clases base.

Pero el problema está en que no se debería considerar los atributos de
un objeto como un simple diccionario estático:

- es posible que los atributos de un objeto no estén declarados
explícitamente por delegar en __getattr__ o __getattribute__ para
acceder a ellos.

- es posible que el atributo esté definido como una "propiedad"
(property), o sea, por un descriptor de datos (data-descriptor), y que
diga que no existe tal atributo hasta que no se inicializa. (Basta con
devolver una excepción AttributeError cuando se accede a él).

Lo único que se puede hacer con certeza es preguntar al objeto si
tiene un atributo con la función hasattr(). Es similar a como en ruby
y otros lenguajes orientados a objetos se accede a los atributos,
mediante mensajes enviados al objeto, sin consideraciones sobre quién
responderá finalmente el mensaje.

Si quiere profundizar más, te aconsejo que eches un vistazo a ésto:

  <http://www.cafepy.com/article/python_attributes_and_methods/contents.html>




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