Python 使用_ugetattr_uu,如何查看是否设置或获取了值?

Python 使用_ugetattr_uu,如何查看是否设置或获取了值?,python,Python,查看以下python3.3代码: class Test(object): def __init__(self): self.__dict__['param'] = {'example': 10} def __getattr__(self, name): if name in self._param.keys(): return self._param[name] else: rais

查看以下python3.3代码:

class Test(object):
    def __init__(self):
        self.__dict__['param'] = {'example': 10}

    def __getattr__(self, name):
        if name in self._param.keys():
            return self._param[name]
        else:
            raise AttributeError(name)

    def __setattr__(self, name, value):
        if name in self._param.keys():
            self.__dict__['param'][name] = value
        else:
            raise AttributeError(name)



test = Test()

print(test.example)
test.example = 20
print(test.example)
方法uu getattr_uuu用于获取实例,该实例是存储在实例化类中的变量。是否可以区分调用uuu getattr_uuu是为了获取值还是设置值

如果没有,我如何调整代码,以便无论何时调用uuu getattr_uuuuuuuuuuuuuuuuuuuuuuuuuuu参数中的值,我都可以设置或标记或其他任何内容。我希望能够在值更改时设置标志。如果只是读取一个值,则不必设置任何标志


另一种可能是“阻止”设置值,如给定示例中所示

为了设置值,Python使用了另一种方法:“naive”实现给了我一个递归错误。那么,你能提供一个关于如何正确执行的代码片段吗?请阅读链接的文档。也不要使用.keys调用,这不是必需的。我认为我是根据文档实现代码的,但我仍然得到无限递归。但我现在看不出明显的问题。@Alex您在某些地方使用param,在其他地方使用_param。修好它,你就会好起来。