begin process at 2010 09 04 14:11:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Python

 > 

Divers

 > 

Débutant(e)

 > 

Problème dictionnaire dans une classe


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème dictionnaire dans une classe

mardi 17 mars 2009 à 19:38:49 | Problème dictionnaire dans une classe

elademri

Bonjour,
Je suis débutant en Python, et je n'ai donc pas consulté toutes les finesses du langage, me reposant sur d'autres connaissances.
Voila une heure que je me prends la tête sur un de mes programmes, et  après tests le problème peut se résumer au code suivant :

>>> class My:
...        dico = {}
...
>>> a1 = My()
>>> a1.dico["name"]="flop"
>>> a2 = My()
>>> a2.dico["name"]="floc"
>>> a1.dico
{'name': 'floc'}
>>> a2.dico
{'name': 'floc'}

Apparemment, le dictionnaire "dico" est partagé par toutes les instances de la classe My, puisque la clé "name" a la valeur "floc" dans les deux cas...
Ce problème n'apparait qu'avec les dictionnaires, de simples chaines ou nombres ne sont pas partagés.

Alors j'aimerais savoir si c'est un bug, ou si le langage est implémenté et documenté comme ça, enfin bref la raison de cet étrange effet ;)
Eventuellement aussi, comment y remédier.

Voila je précise que je bosse en python 2.6.

Merci d'avance
mardi 17 mars 2009 à 20:35:45 | Re : Problème dictionnaire dans une classe

elademri

En cherchant un peu, j'ai pu trouver une "réponse"
En étant initialisé juste après la déclaration de classe (donc hors fonction init), l'attribut dico est considéré comme un "attribut de classe", un peu l'équivalent d'un champ static en java. (sauf qu'on peut modifier ces attributs à partir de n'importe quelle instance de la classe)
Il est donc effectivement partagé par toutes les instances et vaut la dernière valeur qu'on lui a affecté...

... par contre, cette réponse pourrait être satisfaisante si ça marchait pour tous types d'attributs de classe... Bein non, avec un entier ou une chaîne à la place du dictionnaire, par exemple, chaque instance garde sa propre valeur (et la classe en elle-même garde aussi sa propre valeur)

?? des commentaires ? :p
vendredi 20 mars 2009 à 18:10:57 | Re : Problème dictionnaire dans une classe

laurent1024

Réponse acceptée !
Voici quelques élements de réponse :
http://diveintopython.adrahon.org/object_oriented_framework/class_attributes.html
Pour la différence de fonctionnement entre le dictionnaire et l'entier, à mon avis cela vient du fait que, quand tu as un dictionnaire, ton attribut est une référence vers l'objet alors que dans le deuxième cas (avec un entier) c'est un type scalaire.
lundi 6 avril 2009 à 20:25:25 | Re : Problème dictionnaire dans une classe

aera group

Réponse acceptée !
class My:
    def __init__(self):
        self.dico = {}


a1 = My()
a1.dico["name"]="flop"

a2 = My()
a2.dico["name"]="floc"


print a1.dico # >> {'name': 'flop'}
print a2.dico # >> {'name': 'floc'}


Voila
______
Aéra
mercredi 15 avril 2009 à 21:31:49 | Re : Problème dictionnaire dans une classe

elademri

Merci de vos réponses !


Cette discussion est classée dans : problème, my, name, dico, floc


Répondre à ce message

Sujets en rapport avec ce message

Pb avec os.path.join [ par MHI ] Il doit y avoir un problème avec os.path.join lorsqu'on un un répertoire ou un fichier compmençant par un chiffre.Exemple :c:\temp\77.txt donne C:\T Help : Python/DB/CGI [ par Chill_Sik ] Bonjour à tous, voila qqjours que je me casse les dents sur un petit problème alors je me décide a appeler "au secour" car on ne sait jamais que certa ecrire un dico dans un fichier texte [ par airod ] je cherche depuis un bout de temps mais rien y fait! Mon prob: je pars d'un fichier de config (*.cfg), et j'en crée un dico dans mon appli, ceci me s Python et les pointeurs [ par kschn ] Voila le problème j'arrive a intercepter les WM_COPYDATA qui viennent de lapplication à laquelle je me connecte mais le problème c'est que je recoit e Problème d'exécution [ par POWER NUL ] Bonjour. Je suis débutant avec le language Python. J'utilise PythonWin. Je n'arrive pas à exécuter correctement le prog car lafenêtre s'ouvre bien mai Problème avec scons [ par neophenix83 ] Bonjour,Je souhaite installer Scons pour compiler certains programmes, mais j'ai un petit problème.J'ai tout d'abord installé python2.4.2 à l'aide du Importer une image dans Tkinter... [ par skools ] Bonjour à tous, Et pardon à ceux à qui j'ai envoyé des messages perso, je n'arrivais pas à poster un suget dans le forum... Voilà, après des heures d Problème avec les accents [ par TyFFoul ] Bonjour à tous! Je débute avec python et je suis bloqué depuis 2-3h... Voila mon problème : J'ai programmé un script qui me permet de récuper du texte Gadfly : problème dintégration dans Python25 [ par HCD ] J'essaie en vain d'intégrer le module Gadfly dans ma version Python25.Au stade actuel j'ai réussi à télécharger le paquetage gadfly et à le décomprime Import Error : no module named log [ par danyboy007 ] Bonjour à tous,J'ai un projet à réaliser, je dois recompiler un player "HELIX" sous windows et donc quelques commandes à passer dans le DOS. J'ai une


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,370 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales