我有一个简单且可能愚蠢的问题。
getattr(obj, 'attribute', 2+2)
问题是 - 默认 2 + 2
仅在缺少“属性”的情况下才进行评估,还是在任何情况下都会对其进行评估?
谢谢
最佳答案
您可以通过创建一个带有 add 函数的对象来自己测试这一点,该函数让您知道它被调用了。例如,您可以看到该函数在麻烦的情况下打印“called”,表明无论对象上是否存在该属性,都会对添加进行求值:
class obj:
a = "value from obj"
class N:
def __add__(self, other):
print('called')
return 5
a = N()
b = N()
getattr(obj, 'a', a + b)
# called
#'value from obj'
getattr(obj, 'z', a + b)
# called
# 5
关于Python getattr 默认值评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62956646/