gpt4 book ai didi

python - __getattr__ 在 python 中递归

转载 作者:太空狗 更新时间:2023-10-30 00:51:34 24 4
gpt4 key购买 nike

我用下面的方式声明了一个类

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< 之后被调用 并且这种递归是不可阻挡的。你能帮我解决一下吗?我需要这样实现。

谢谢

最佳答案

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

基本上,问题在于每次您执行类似self.foo = bar 的操作时总是会调用__setattr__,因此如果您在__setattr__ 你将得到你得到的递归。您需要做的是将您尝试直接设置的值插入 __dict__ self.__dict__['foo'] = bar

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

关于python - __getattr__ 在 python 中递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11145501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com