我想定义一个包含以下内容的类read
and write
方法,可以按如下方式调用:
instance.read
instance.write
instance.device.read
instance.device.write
为了不使用交错类,我的想法是覆盖__getattr__
and __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)
As in __init__
该代码尝试创建一个新属性x
,它调用__setattr__
,这再次调用__setattr__
等等。我需要如何更改此代码,在本例中是一个新属性x
of self
被创建,保持价值1
?
或者有没有更好的方法来处理像instance.device.read
被“映射”到instance.read
?
因为总是有人问为什么:我需要创建以下抽象:xmlrpc
调用,非常简单的方法,例如myxmlrpc.instance,device.read
并可以创建类似的。我需要“模拟”它来模仿这种多点方法调用。
必须调用父类__setattr__
method:
class MyTest(object):
def __init__(self, x):
self.x = x
def __setattr__(self, name, value):
if name=="device":
print "device test"
else:
super(MyTest, self).__setattr__(name, value)
# in python3+ you can omit the arguments to super:
#super().__setattr__(name, value)
关于最佳实践,因为您计划通过以下方式使用它xml-rpc
我认为这可能在内部完成会更好_dispatch method.
一种快速而肮脏的方法就是简单地执行以下操作:
class My(object):
def __init__(self):
self.device = self
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)