2010-12-14 2 views
7

Mi chiedo se sia possibile aggiungere campi agli oggetti dinamicamente. Per esempio, io voglio essere in grado di aggiungere qualcosa come:Python: aggiunta dinamica di campi agli oggetti

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

Quando eseguo che in Python da riga di comando interprete ottengo:

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

Qualche idea?

risposta

14

Prova questa:

class Object: 
    pass 

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

Grazie, che ha lavorato per me. Ho due domande 1) Cosa significa la parola chiave 'pass' qui? 2) Se ho un'altra istanza obj2 di Object() nel mio codice, obj.x creerà obj2.x (con qualche valore non definito)? – Rafid

+1

1) Per quanto riguarda 'pass': http://docs.python.org/tutorial/controlflow.html#pass-statements 2) No, quando si esegue' obj.x = 5', si aggiunge solo l'attributo 'x' a singola istanza di 'Object'. Se vuoi che tutte le istanze di 'Object' condividano x, devi fare' Object.x = 5'. – gruszczy

+0

Non esiste qualcosa come un valore non definito in Python - il più vicino possibile è "Nessuno". Gli oggetti creati nel modo in cui gruszczy propone non hanno alcun tipo di "prototipo"; è possibile aggiungere ed eliminare attributi a piacere e non ha alcun effetto su altre istanze della classe Object. –

5

Non è possibile assegnare agli attributi di object istanze come questa. Deriva da object e utilizza un'istanza di quella classe.