Veo variables de miembros de primera clase usando self.__dict__
, pero también me gustaría ver un diccionario de propiedades, tal como se define con el decorador @property. ¿Cómo puedo hacer esto?En un objeto Python, ¿cómo puedo ver una lista de propiedades que se han definido con @property decorator?
Respuesta
Se podría agregar una función a su clase que se ve algo como esto:
def properties(self):
class_items = self.__class__.__dict__.iteritems()
return dict((k, getattr(self, k))
for k, v in class_items
if isinstance(v, property))
Este busca cualquier propiedad en la clase y luego crea un diccionario con una entrada para cada propiedad con el valor de la instancia actual.
dir(obj)
proporciona una lista de todos los atributos de obj
, incluyendo métodos y atributos.
derecho, pero necesito conocer las propiedades específicamente. Consideré sobrescribir el decorador '@ property' para agregarlos a un registro en' obj', pero calculé que Python probablemente tiene una fantasía '__something__' que ya hace esto. –
Las propiedades son parte de la clase, no de la instancia. Así que hay que mirar a self.__class__.__dict__
o equivalentemente vars(type(self))
Así las propiedades serían
[k for k, v in vars(type(self)).items() if isinstance(v, property)]
+1 me gusta la comprensión de la lista en k, v :) –
Para que un objeto f, esto da la lista de miembros que son propiedades:
[n for n in dir(f) if isinstance(getattr(f.__class__, n), property)]
+1 - pero eso es solo una lista de palabras clave, ¿correcto? –
sí. Las otras soluciones son más completas. –
- 1. Usando @property decorator en los dicts
- 2. Objeto Python @property
- 3. ¿Cómo puedo obtener una lista de propiedades en un objeto en Actionscript?
- 4. ¿Cómo puedo ver un objeto con una alerta()
- 5. ¿Cómo se enumeran las propiedades de un objeto en Python?
- 6. Python: @staticmethod con @property
- 7. ¿Cómo obtener una lista de propiedades con un atributo determinado?
- 8. Cómo crear una lista con un tipo de objeto dinámico
- 9. dinámicamente añadiendo @property en Python
- 10. Subclassing `property` de Python
- 11. Notificar que todas las propiedades han cambiado en ViewModel
- 12. PostgreSQL cómo ver qué consultas se han ejecutado
- 13. Cómo hacer una nueva lista con una propiedad de un objeto que está en otra lista
- 14. ¡No se pueden recuperar los miembros enum en el orden en que se han definido!
- 15. Python Class Decorator
- 16. ¿Cómo obtengo una lista de archivos que se han `requerido 'en Ruby?
- 17. ¿Cómo cierra python los archivos que se han gc'ed?
- 18. ¿Cómo encontrar las propiedades de un objeto?
- 19. Javascript, ver "lista de nodos objeto"
- 20. ¿Cómo puedo obtener una lista de referencias de un objeto en Python?
- 21. Usando LINQ, ¿cómo puedo encontrar un objeto con un valor de propiedad dado de una lista?
- 22. Crear un objeto con propiedades,
- 23. Obtenga una lista de listas de cambios que no se han integrado en una sucursal particular
- 24. ¿Cómo se señala una actualización a un @property de solo lectura que depende de las propiedades secundarias?
- 25. Django: ¿Cómo puedo ver una lista de patrones Url?
- 26. ¿Cómo se puede obtener una lista de todas las consultas que se han ejecutado en una página en ColdFusion 9
- 27. ¿Cómo imprimir un gráfico de impulso en graphviz con una de las propiedades que se muestran?
- 28. Agregar un objeto a una lista de Python
- 29. ¿Cómo puedo verificar para ver si se carga un cuadro de diálogo Dojo?
- 30. ¿Cómo heredar y extender un objeto de lista en Python?
lovely! precisamente lo que buscaba. gracias –
Tenga en cuenta que esto solo enumera las propiedades declaradas en la clase en sí IIRC. Las propiedades de las superclases no aparecerán en la lista. –
Puedes caminar self .__ class __. Mro() para encontrar clases para padres. –