我有一个使用__getattr__
. 属性可能很昂贵,例如执行查询。现在,我正在使用一个库,它在实际获取对象之前检查我的对象是否具有该属性。
结果,一个查询被执行了两次而不是一次。当然,实际执行__getattr__
以真正知道属性是否存在是有意义的。
class C(object):
def __getattr__(self, name):
print "I was accessed"
return 'ok'
c = C()
hasattr(c, 'hello')
有什么办法可以防止这种情况发生吗?
如果支持 Python,__hasattr__
那么我可以简单地检查查询是否存在,而不是实际运行它。
我可以创建一个缓存,但它很重,因为查询可能有参数。当然,服务器可能会自己缓存查询并将问题最小化,但是如果查询返回大量数据,它仍然很重。
有任何想法吗?