如何正确使用__setattr__,避免无限递归
- 论坛
- 如何正确使用__setattr__,避免无限递归
13 浏览
如何正确使用__setattr__,避免无限递归
我想定义一个包含read
和write
方法的类,可以按照以下方式调用:
instance.read instance.write instance.device.read instance.device.write
为了不使用交错类,我的想法是重写__getattr__
和__setattr__
方法,并检查给定的名称是否为device
,将返回重定向到self
。但是我遇到了一个导致无限递归的问题。示例代码如下:
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)
在__init__
中,代码试图创建一个新属性x
,它调用__setattr__
,然后再次调用__setattr__
,依此类推。我需要如何更改此代码,以便在这种情况下,创建一个self
的新属性x
,其值为1
?
或者是否有更好的方法来处理类似instance.device.read
这样的调用,将其“映射”到instance.read
?
由于经常有关于为什么的问题:我需要创建xmlrpc
调用的抽象,可以创建非常简单的方法,如myxmlrpc.instance,device.read
等。我需要“模拟”这个以模仿这样的多点方法调用。