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