gpt4 book ai didi

python - 如何防止 hasattr 检索属性值本身

转载 作者:太空狗 更新时间:2023-10-29 21:54:57 26 4
gpt4 key购买 nike

我有一个使用 __getattr__ 实现虚拟属性的类。属性可能很昂贵,例如执行查询。现在,我正在使用一个库,它会在实际获取对象之前检查我的对象是否具有该属性。

因此,一个查询被执行了两次而不是一次。当然,实际执行 __getattr__ 以真正知道该属性是否存在是有意义的。

class C(object):
def __getattr__(self, name):
print "I was accessed"
return 'ok'

c = C()
hasattr(c, 'hello')

有什么办法可以避免这种情况吗?

如果 Python 支持 __hasattr__ 那么我可以简单地检查查询是否存在,而不是实际运行它。

我可以创建一个缓存,但它很重,因为查询可能有参数。当然,服务器可能会缓存查询本身并尽量减少问题,但如果查询返回大量数据,它仍然很重。

有什么想法吗?

最佳答案

虽然最初我不喜欢猴子补丁的想法,总的来说这是一个“坏主意”,但我在 1999 年遇到了一个非常巧妙的解决方案!!

http://code.activestate.com/lists/python-list/14972/

def hasattr(o, a, orig_hasattr=hasattr):
if orig_hasattr(o, "__hasattr__"):
return o.__hasattr__(a)
return orig_hasattr(o, a)

__builtins__.hasattr = hasattr

本质上,它在 Python 中创建了对 __hasattr__ 的支持,这是我最初认为的最佳解决方案。

关于python - 如何防止 hasattr 检索属性值本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30290389/

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