[Python] Problema con __getattr__

Listemessaggi CoPlast listemessaggi a coplast.eu
Dom 26 Ott 2008 22:44:41 CET


Ciao a tutti,
ho un problema con l'overloading dell'operatore in oggetto. Cerco di 
spiegarlo con un esempio semplice.
Col seguente:

class Commuter:
    def __init__(self, val):
        self.val = val

se scrivo:

c = Commuter(23)
print(c)

ottengo:

<__main__.Commuter instance at 0xb7ddbfcc>

e fin quà niente di strano.
Ma se come detto, faccio l'overloading di questo operatore, cioè con:

class Commuter:
    def __init__(self, val):
        self.val = val
    def __getattr__(self, nome):
        print("BO")

se scrivo:

c = Commuter(23)
print(c)

ottengo:

BO
Traceback (most recent call last):
  File "libreria.py", line 83, in ?
    print(c)
TypeError: 'NoneType' object is not callable


Osservo che ha scritto BO segno che è passato per __getattr__. Ma perché?
Forse viene interpretato come una qualificazione di un attributo di nome 
"" (senza nome)?
Se su def __getattr__(self, nome): ci inserisco un print(nome) ottengo:
__str__
Ciò mi mette ancora più in confusione.

Comunque il mio obiettivo sarebbe quello di usare __radd__ solo che il 
mio oggetto ha sia la __radd__ che la __getattr__ e quest'ultima fa in 
modo che la __radd__ non riceva correttamente l'istanza del mio oggetto 
impedendomi di usarla.


Qualche idea?
Grazie.


Matteo.


Maggiori informazioni sulla lista Python