Chcę, aby zdefiniować klasę zawierającą read
i write
methode, które można nazwać w następujący sposób:Jak korzystać __setattr__ poprawnie, unikając nieskończoną rekurencję
instance.read
instance.write
instance.device.read
instance.device.write
Aby nie używać klas przeplotem, mój pomysł był aby zastąpić __getattr__
i __setattr__
metody i sprawdzić, czy podana nazwa to device
, aby przekierować powrót do self
. Ale napotkałem problem z nieskończoną rekurencją. Przykładowy kod jest następujący:
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)
jak w __init__
kod próbował stworzyć nowy atrybut x
, wywołuje __setattr__
, który ponownie wzywa __setattr__
i tak dalej. Jak muszę zmienić ten kod, aby w tym przypadku utworzyć nowy atrybut x
z self
, zawierający wartość 1
?
Czy istnieje lepszy sposób na obsłużenie połączeń, takich jak instance.device.read
, aby zostać "zamapowanymi" na instance.read
?
Ponieważ zawsze są pytania dotyczące tego, dlaczego: Potrzebuję tworzyć abstrakcje połączeń xmlrpc
, dla których można stworzyć bardzo proste metody, takie jak myxmlrpc.instance,device.read
i podobne. Muszę "kpić" z tego, aby naśladować takie połączenia z wieloma kropkami.
Podoba mi się szybki i nieuporządkowany sposób: wystarczy jedna linia, aby uzyskać pożądane zachowanie! Dzięki – Alex