最佳答案
我想定义一个包含 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
和类似的方法。我需要“模拟”它来模拟这样的多点方法调用。