voglio definire una classe contenente read
e write
Methode, che può essere chiamato come segue:Come utilizzare __setattr__ correttamente, evitando infinita ricorsione
instance.read
instance.write
instance.device.read
instance.device.write
Per non utilizzare le classi interlacciati, la mia idea era quella di sovrascrivere il __getattr__
e __setattr__
metodi e per verificare, se il nome dato è device
per reindirizzare il ritorno a self
. Ma ho riscontrato un problema con ricorsioni infinite. Il codice di esempio è il seguente:
class MyTest(object):
def __init__(self, x):
self.x = x
def __setattr__(self, name, value):
if name=="device":
print "device test"
else:
setattr(self, name, value)
test = MyTest(1)
Come nel __init__
codice cercato di creare un nuovo attributo x
, chiama __setattr__
, che chiama nuovamente __setattr__
e così via. Come devo cambiare questo codice, in questo caso viene creato un nuovo attributo x
di self
, contenente il valore 1
?
Oppure esiste un modo migliore per gestire chiamate come instance.device.read
da "mappare" a instance.read
?
Come sempre ci sono domande sul perché: ho bisogno di creare astrazioni di chiamate xmlrpc
, per le quali è possibile creare metodi molto semplici come myxmlrpc.instance,device.read
e simili. Ho bisogno di "deridere" questo per imitare tali chiamate con metodo multi-punto.
Mi piace il modo rapido e sporco: solo una riga per ottenere il comportamento desiderato! Grazie – Alex