__getattr\uuuuu在python中进行递归
我用下面的方法声明了一个类__getattr\uuuuu在python中进行递归,python,python-2.7,Python,Python 2.7,我用下面的方法声明了一个类 class A: def __init__(self, list_1, list_2): self.list1 = list_1 self.list2 = list_2 def __getattr__(self, item): if item in self.list1: return "It is in list 1" elif item in self.list2: return "
class A:
def __init__(self, list_1, list_2):
self.list1 = list_1
self.list2 = list_2
def __getattr__(self, item):
if item in self.list1: return "It is in list 1"
elif item in self.list2: return "It is in list 2"
else: return "It is in neither list 1 nor list 2"
在这里,当我添加\uuuuu setattr\uuuuu
self.list
1时会递归,因为\uuuu getattr\uuuuu
在每次self.list1
之后都会被调用,这种递归是不可阻挡的。你能帮我解决一下吗。我需要像这样实现
谢谢首先,这是
\uu getattr\uuu
的一个完全奇怪的用法,但我假设你知道这一点
基本上,问题在于每次执行类似于self.foo=bar
的操作时总是调用\uuuu setattr\uuuu
,因此如果在\uuu setattr\uuuu
中使用它,那么最终将得到递归。您需要做的是将您试图直接设置的值插入\uuuu dict\uuuu
self.\uuuu dict\uuuu['foo']=bar
如果您使用的是新样式的类(即
A
是对象
的后代),那么您也可以执行super(A,self)。\uuuuuuuuuSetAttr\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。如果是,请解释如何使用\uuuuu setattr\uuuuuuu
。尝试在[“列表1”、“列表2”]中添加类似的内容:如果项:返回自我。\uuuuuuuu getattr\uuuuuuuuu()
的开头添加。