【发布时间】:2013-06-05 21:16:34
【问题描述】:
我想定义一个包含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 和类似的非常简单的方法。我需要“模拟”它以模仿这种多点方法调用。
【问题讨论】:
-
使用@property 可以更轻松地解决此用例
标签: python python-2.7 getattr setattr