Bonjour,

Lorsque l'on assigne un attribut ayant le même nom qu'une méthode, celui ci prends la priorité sur cette dernière. Est ce normal si cela ne fonctionne pas pour l'attribut __getitem__, accédé avec la syntaxe d[] ? (Je suis en Py25)

Merci d'avance

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
 
class A(dict):
    def __init__(self):
        dict.__init__(self)
    def __getitem__(self, k):
        print "A.get ",k
        return dict.__getitem__(self, k)
 
class D(A):
    def __init__(self):
        A.__init__(self)
        self._inner= dict()
        "Shortcuts __getattr__ to self._inner"
        self.__getattr__= self._inner.__getitem__
 
if __name__ == '__main__':
    d=D()
    d._inner[0]= 1 
    d[0]= 1
    print "d.__getattr__(0)"
    d.__getattr__(0) # does not call A.__getitem__, as expected
    print "d[0]"
    d[0] # this CALLS A.__getitem__, UNEXPECTED !