IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Dictionnaire et attributs


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 49
    Par défaut Dictionnaire et attributs
    Bonjour,
    J'ai un dictionnaire. Je voudrais que les clés puissent être appelées comme des attributs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>>dico={'a':0,'b':1,'c':2}
    # Je souhaite pouvoir faire ça:
    >>>dico.a
    0 #réponse de l'interpréteur
    >>>dico.b
    1 #réponse de l'interpréteur
    Je n'ai pas encore trouvé mon bonheur pour le faire correctement...
    Je suppose qu'il faut passer par une classe qui récupère le dico et qui surcharge __getattr__ ou __setattr__ ou les 2.
    1/ Comment le faire ?
    2/ Par la même occasion, quelle est la différence entre __getattr__ ou __setattr__ ?

    Merci d'avance
    Dominique

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    La syntaxe dico['a'] ne te convient pas ? Elle est pourtant beaucoup plus pratique, c'est du moins mon avis.

    Oui si tu veux faire ça il te faudra sûrement passer par une classe que tu auras fait toi-même. Tu peux pour cela utiliser __dict__, mais __getattr__ et __setattr__ seront vite nécessaires pour des usages plus complexes.

    Un exemple très simpliste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> class dico:
    ...     def __init__(self, dic):
    ...             self.__dict__.update(dic)
    ...             self.dic = dic
    ...
    >>> d = dico({'a':0,'b':1,'c':2})
    >>> d.a
    0
    >>> d.b
    1
    >>> d.c
    2
    La différence etntre __getattr__, __setattr__ (__delattr__) ?
    __getattr__ sera appelé pour les expressions du type (tout ce qui concerne l'acquisition de la valeur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    machin = objet.attribut
    __setattr__ sera appelé en cas de modification de la valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objet.attribut = valeur
    __delattr__ sera appelé pour la destruction de l'attribut

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 49
    Par défaut
    Merci beaucoup pour la réponse claire, précise et rapide
    Dominique

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/09/2012, 11h52
  2. Acces ecriture sur un attribut via un dictionnaire
    Par luluunix dans le forum Général Python
    Réponses: 9
    Dernier message: 13/03/2012, 09h35
  3. Attribut de classe : dictionnaire toujours vide
    Par MaxouHTR dans le forum Général Python
    Réponses: 8
    Dernier message: 16/09/2008, 11h43
  4. Lire un attribut dans un fichier XML en C++
    Par ti.k-nar dans le forum XML
    Réponses: 2
    Dernier message: 14/10/2002, 15h22
  5. comment changer d'attribut de fonte dans un Tlabel?
    Par sb dans le forum Composants VCL
    Réponses: 3
    Dernier message: 21/08/2002, 16h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo