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 "It is in list 2"
        else: return "It is in neither list 1 nor list 2"

在这里,当我添加__setattr__ self.list1 时,它是递归的,因为__getattr__在每次调用之后都会被调用,self.list1并且这种递归是不可阻挡的。你能帮我解决一下吗。我需要像这样实现。

谢谢

4

1 回答 1

12

首先,这是一个完全奇怪的用法__getattr__,但我假设你知道这一点。

基本上,问题是__setattr__每次你做类似的事情时都会调用它self.foo = bar,所以如果你在里面使用它,__setattr__你最终会得到你得到的递归。您需要做的是将您尝试设置的值直接插入__dict__ self.__dict__['foo'] = bar.

如果您正在使用新样式类(即A是 的后代object),那么您也可以这样做super(A, self).__setattr__(item, value),甚至只是object.__setattr__(self, item, value)

于 2012-06-21T19:49:41.530 回答