gpt4 book ai didi

不在 hasattr() 上求值的 Python 惰性属性

转载 作者:太空狗 更新时间:2023-10-30 01:17:44 27 4
gpt4 key购买 nike

是否有可能制作一个装饰器,使当您尝试使用 hasattr() 访问它时不评估的属性是惰性的?我想出如何让它变得懒惰,但是 hasattr() 让它过早求值。例如,

class lazyattribute:
# Magic.

class A:
@lazyattribute
def bar(self):
print("Computing")
return 5

>>> a = A()
>>> print(a.bar)
'Computing'
5
>>> print(a.bar)
5
>>> b = A()
>>> hasattr(b, 'bar')
'Computing'
5
# Wanted output: 5

最佳答案

这可能很难做到。来自hasattr documentation :

hasattr(对象, 名称)

参数是一个对象和一个字符串。如果字符串是对象属性之一的名称,则结果为 True,否则为 False。 (这是通过调用 getattr(object, name) 并查看它是否引发异常来实现的。)

由于属性可以通过 __getattr__ 方法动态生成,因此没有其他方法可以可靠地检查它们的存在。对于您的特殊情况,也许显式测试字典就足够了:

any('bar' in d for d in (b.__dict__, b.__class__.__dict__))

关于不在 hasattr() 上求值的 Python 惰性属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1286548/

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