2010-06-21 12 views
2

Ceci est une question idiote, mais je ne peux pas le comprendre donc j'ai dû demander.en utilisant le format 'variable.xyz' en Python

Je suis en train d'éditer du code Python et pour éviter d'être trop compliqué, je dois pouvoir définir une nouvelle variable sur les lignes suivantes: Car.store = False.

La variable n'a pas été définie dans cette situation. Je sais que je peux faire des dicts (Car ['store'] = Faux) etc ... mais ça doit être dans le format ci-dessus.

Appréciez toute aide

Merci.

+1

Donc 'Car' n'a pas été défini, est-ce vraiment important? c'est-à-dire pourquoi ne pouvez-vous pas simplement définir 'store', ou' car_store' si vous voulez être spécifique? –

+0

Dans cette situation, c'était try: Car.store = asdf sauf: Car.store = False. J'essayais d'ajouter la gestion des erreurs sans changer trop de variables, c'est pourquoi Car.store devait être dans ce format spécifique. – iceanfire

Répondre

2

Je pense que le plus proche, vous pouvez obtenir ce que vous voulez est en ajoutant une ligne supplémentaire (en supposant que vous avez défini une classe appelée voiture):

car = Car() 
car.store = False 

Sans la première ligne, vous obtiendrez une erreur.

Si vous voulez la brièveté, vous pouvez définir store à False dans __init__ de sorte que seule la première ligne est nécessaire.

+0

merci. Ça a marché. – iceanfire

-1

Peut-être que vous pouvez essayer ce cinque:

try: 
    car.store = False 
except NameError: 
    #This means that car doesn't exists 
    pass 
except AttributeError: 
    #This means that car.store doesn't exists 
    pass 
+0

-1 Il est très peu probable que AttributeError soit déclenché dans les circonstances que vous décrivez (sauf si la classe est définie avec '__slots__'). Avez-vous réellement essayé cela vous-même? Cela se produirait bien sûr si vous avez fait 'foo = car.store' et' car' existe mais n'a pas d'attribut 'store', mais c'est un scénario complètement différent. –

+0

Ouais, vous avez raison Vous devez ajouter une ligne pour obtenir ce code de travail.

 try: car.store car.store = False except NameError: #This means that car doesn't exists pass except AttributeError: #This means that car.store doesn't exists pass 
razpeitia

0

Je suis un peu en retard à la fête, mais il faut vérifier également la fonction namedtuple dans le module de recouvrement. Il vous permet d'accéder aux champs d'un tuple comme s'ils étaient nommés membres d'une classe, et c'est bien quand tout ce que vous voulez est une "structure" de style C. Bien sûr, les tuples sont immuables, donc vous devrez probablement réorganiser votre code existant; peut-être pas la meilleure chose pour cet exemple, mais peut-être le garder à l'esprit à l'avenir.

+0

Exemple de code ressemblerait à ceci: '>>> des collections d'importation namedtuple >>> voiture = namedtuple ('Car', 'magasin') (magasin = False) >>> car' ' Car (store = Faux) ' – Darthfett

-1
car, car.store = car if "car" in locals() else lambda:1, False 
Questions connexes