[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