2010-12-14 6 views
7

Je me demande s'il est possible d'ajouter dynamiquement des champs aux objets. Par exemple, je veux être en mesure d'ajouter quelque chose comme:Python: Ajout dynamique de champs aux objets

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

Quand j'exercerai que interpretor de ligne de commande Python je reçois:

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

Toute idée?

Répondre

14

Essayez ceci:

class Object: 
    pass 

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

Merci, qui a travaillé pour moi. J'ai deux questions 1) Qu'est-ce que le mot clé 'pass' signifie ici? 2) Si j'ai une autre instance obj2 de Object() dans mon code, obj.x va-t-il créer obj2.x (avec une valeur indéfinie)? – Rafid

+1

1) En ce qui concerne 'pass': http://docs.python.org/tutorial/controlflow.html#pass-statements 2) Non, quand vous faites' obj.x = 5', vous ajoutez seulement l'attribut 'x' instance unique de 'Object'. Si vous voulez que toutes les instances 'Object' partagent x, vous devez faire' Object.x = 5'. – gruszczy

+0

Il n'existe pas de valeur indéfinie dans Python - le plus proche est 'None'. Les objets créés de la manière proposée par Gruszczy n'ont aucun type de "prototype"; vous pouvez ajouter et supprimer des attributs à volonté, et cela n'a aucun effet sur les autres instances de la classe Object. –

5

Vous ne pouvez pas affecter aux attributs de object instances de ce type. Dérivez de object et utilisez une instance de cette classe.