を使用して仮想属性を実装するクラスがあります__getattr__
。属性は、クエリの実行など、コストがかかる場合があります。現在、オブジェクトが実際に属性を取得する前に属性を持っているかどうかをチェックするライブラリを使用しています。
その結果、クエリは 1 回ではなく 2 回実行されます。もちろん__getattr__
、属性が存在するかどうかを実際に知るために実際に実行することは理にかなっています。
class C(object):
def __getattr__(self, name):
print "I was accessed"
return 'ok'
c = C()
hasattr(c, 'hello')
これを防ぐ方法はありますか?
Python がサポートさ__hasattr__
れている場合、クエリが存在するかどうかを確認するだけで済み、実際に実行することはできません。
キャッシュを作成できますが、クエリにパラメーターが含まれている可能性があるため、重いです。もちろん、サーバーはクエリ自体をキャッシュして問題を最小限に抑えることができますが、クエリが大量のデータを返す場合は依然として負荷が高くなります。
何か案は?