2010-12-14 20 views
7

Me pregunto si es posible agregar campos a objetos dinámicamente. Por ejemplo, quiero ser capaz de añadir algo como:Python: Agregar campos a objetos dinámicamente

user = object() 
user.first_name = 'John' 
user.last_name = 'Smith' 

Cuando ejecuto que en Python línea de comando intérprete consigo:

AttributeError: 'object' object has no attribute 'first_name' 

Alguna idea?

Respuesta

14

Prueba esto:

class Object: 
    pass 

obj = Object() 
obj.x = 5 
+0

Gracias, que trabajó para mí. Tengo dos preguntas 1) ¿Qué significa la palabra clave 'pasar' aquí? 2) Si tengo otra instancia obj2 de Object() en mi código, obj.x creará obj2.x (con algún valor indefinido)? – Rafid

+1

1) Con respecto a 'pass': http://docs.python.org/tutorial/controlflow.html#pass -statements 2) No, cuando haces' obj.x = 5', solo agregas el atributo 'x' a única instancia de 'Objeto'. Si desea que todas las instancias 'Object' compartan x, debe hacer' Object.x = 5'. – gruszczy

+0

No existe un valor indefinido en Python; lo más parecido que se obtiene es 'None'. Los objetos creados en la forma propuesta por gruszczy no tienen ningún tipo de "prototipo"; puede agregar y eliminar atributos a voluntad, y no tiene efecto en ninguna otra instancia de la clase Object. –

5

No se puede asignar a los atributos de object instancias como esta. Derive de object, y use una instancia de esa clase.

Cuestiones relacionadas