Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
__getattr\uuuuu在python中进行递归_Python_Python 2.7 - Fatal编程技术网

__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()
的开头添加。