Python 3.7.2 : Problème avec setattr et variable de type liste
Résolu/Fermé
A voir également:
- Python 3.7.2 : Problème avec setattr et variable de type liste
- Citizen code python - Guide
- Compris entre python ✓ - Forum Python
- Chronomètre python - Forum Windows 7
- Ce programme est écrit en python ✓ - Forum Python
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Ubuntu
3 réponses
Bonjour,
setattr sert à donner une autre valeur à l'attribut donné d'un objet donné.
Ce que tu veux faire (pourquoi et dans quel but ?) est de modifier une valeur d'une liste.
Alors il faut simplement récupérer l'attribut de l'objet et changer la valeur de tel élément.
setattr sert à donner une autre valeur à l'attribut donné d'un objet donné.
Ce que tu veux faire (pourquoi et dans quel but ?) est de modifier une valeur d'une liste.
Alors il faut simplement récupérer l'attribut de l'objet et changer la valeur de tel élément.
class Glob: def __init__(self): self.x = [0, 0] glob = Glob() getattr(glob, 'x')[0] = 1
Bonjour Trifou,
Mais oui, comment n'y ai-je pas pensé ?
Ca fonctionne, merci !
Avant de fermer ce post, je te donne pour info ce que je veux faire:
En fait, ma classe Glob ne sert pas à créer des instances mais à stocker des variables globales, je sais qu'il n'est pas très conseillé d'en utiliser, mais j'ai beaucoup de variables et ça me parait plus élégant comme ça
(il n'y a plus de déclarations global .. dans chacune de mes fonctions)
J'ai une fonction qui sert a enregistrer la valeur d'une variable en tant que valeur précédente, la valeur courante étant appelée à être changée plus tard, ex : la valeur courante de toto doit être stockée dans prev_toto
Or, je passe en argument à ma fonction non pas Glob.toto mais la chaine de caractères var contenant Glob.toto, et je fais donc l'opération suivante (les 1er et 3eme arguments étants des chaines de caractères) :
c,v = var.split('.') # c = 'Glob', et v =' toto'
setattr(globals()[c], 'prev_'+v, eval(var)) #Glob.prev_toto = Glob.toto !
Je vais pouvoir modifier ça pour le cas ou variable = liste
Encore merci
Mais oui, comment n'y ai-je pas pensé ?
Ca fonctionne, merci !
Avant de fermer ce post, je te donne pour info ce que je veux faire:
En fait, ma classe Glob ne sert pas à créer des instances mais à stocker des variables globales, je sais qu'il n'est pas très conseillé d'en utiliser, mais j'ai beaucoup de variables et ça me parait plus élégant comme ça
(il n'y a plus de déclarations global .. dans chacune de mes fonctions)
J'ai une fonction qui sert a enregistrer la valeur d'une variable en tant que valeur précédente, la valeur courante étant appelée à être changée plus tard, ex : la valeur courante de toto doit être stockée dans prev_toto
Or, je passe en argument à ma fonction non pas Glob.toto mais la chaine de caractères var contenant Glob.toto, et je fais donc l'opération suivante (les 1er et 3eme arguments étants des chaines de caractères) :
c,v = var.split('.') # c = 'Glob', et v =' toto'
setattr(globals()[c], 'prev_'+v, eval(var)) #Glob.prev_toto = Glob.toto !
Je vais pouvoir modifier ça pour le cas ou variable = liste
Encore merci