最佳答案
我想定义一个包含 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__再次调用 __setattr__,以此类推。我需要如何改变这个代码,在这种情况下,一个新的属性 x的 self创建,保持值 1?
或者有什么更好的方法来处理像 instance.device.read这样被映射到 instance.read的调用?
因为总是有关于为什么的问题: 我需要创建 xmlrpc调用的抽象,为此可以创建非常简单的方法,如 myxmlrpc.instance,device.read和类似的方法。我需要“模拟”它来模拟这样的多点方法调用。