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 :

Petite incompréhension avec __dict__ et dir


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de sopsag
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 224
    Par défaut Petite incompréhension avec __dict__ et dir
    Bonjour à tous,

    voici un petit bout de code qui illustre un truc qui m'échappe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    class Spam:
        e_and,e_now,e_for,e_something,e_completely,e_different = xrange( 6 )
     
        def value (self,name):  # fonction ringarde qui fait ce que je veux
            if name == 'and'        : return self.e_and
            if name == 'now'        : return self.e_now
            if name == 'for'        : return self.e_for
            if name == 'something'  : return self.e_something
            if name == 'completely' : return self.e_completely
            if name == 'different'  : return self.e_different
            return -1
     
        def auto_value (self,name): # fonction "classe", mais qui ne marche pas
            return self.__dict__.get( 'e_'+name,-1 )
     
    s = Spam()
     
    print dir( s )
    print s.__dict__
     
    print s.value('for')
    print s.value('eggs')
     
    print s.auto_value('for')
    print s.auto_value('eggs')
    affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ['__doc__', '__module__', 'auto_value', 'e_and', 'e_completely', 'e_different', 'e_for', 'e_now', 'e_something', 'value']
    {}
    2
    -1
    -1
    -1
    D'où mes questions :
    Pourquoi y a-t-il une différence entre dir et __dict__ ?
    Comment "instrospecter" les membres statiques ?
    Pourquoi auto_value ne marche pas ?

    Merci d'avance

  2. #2
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    salut, tu dois passer par __class__:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        def auto_value (self,name): # fonction "classe"
            return self.__class__.__dict__.get( 'e_'+name,-1 )

  3. #3
    Membre confirmé Avatar de sopsag
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 224
    Par défaut
    mmm... __class__ permet d'accéder aux membres statiques...
    Super
    merci

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,
    Juste pour vous suggérer une autre façon de faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        @classmethod
        def auto_value (cls,name): # fonction "classe", mais qui ne marche pas
            return cls.value(name)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 99
    Par défaut
    Personnellement, j'aurais même une petite préférence pour l'utilisation de getattr(object, name, default) qui pourra profiter des règles de résolution de noms habituelles, et en particulier qui supportera les variables d'instances et l'héritage.

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

Discussions similaires

  1. petit probleme avec l'éditeur de builder
    Par qZheneton dans le forum C++Builder
    Réponses: 2
    Dernier message: 28/10/2004, 16h19
  2. incompréhension avec ado
    Par Orgied dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/05/2004, 18h24
  3. [CVS] Petits déboires avec JBuilder9 et CVS
    Par Marc_P dans le forum JBuilder
    Réponses: 2
    Dernier message: 19/02/2004, 09h35
  4. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 16h52
  5. [debutant] pour debbuger un petit prog avec menu
    Par niluge01 dans le forum Windows
    Réponses: 3
    Dernier message: 22/11/2003, 14h03

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