gpt4 book ai didi

python - 如何防止未声明的变量和方法的 AttributeError 并多次修复 __getattr__ 方法调用?

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:01 27 4
gpt4 key购买 nike

class Foo(object):
def __init__(self):
self.a = 1
self.c = 0
def __getattr__(self, name):
self.c += 1
print('getattribute')
if hasattr(self, name) is False:
print("No")
return None
return super(Foo, self).__getattr__(self, name)

fo = Foo()
print(fo.a)
print(fo.b)
print(fo.c)

运行上述程序会多次打印“getattribute”和“no”。 __getattr__ 被多次调用。准确地说是333。 self.c 打印 333。

我想要实现的是拥有一个在类中未声明类变量或方法时不会引发错误的类。

这可能是什么原因?

最佳答案

hasattr 只是尝试获取属性,如果不能则返回 False。是否不能在 Python 3 中通过尝试抛出 AttributeError 来确定,而在 Python 2 中通过尝试抛出any 错误来确定。 (这包括 RecursionError,这就是它在 333 次调用后无声地失败的原因。Python 2 不是一种健全的语言;如果可能请升级到 3。)

相反,您可以自己在 AttributeError 上返回替代值:

def __getattr__(self, name):
try:
return super(Foo, self).__getattr__(self, name)
except AttributeError:
return None

这可能会隐藏其他 AttributeError,但仅凭 Python 的特性很难避免这样做。

关于python - 如何防止未声明的变量和方法的 AttributeError 并多次修复 __getattr__ 方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45234632/

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