キャッシング スキームを実装する単純なクラス (class Cache(object):
つまり、新しい型) があります。キャッシュ内のルックアップは、 を通じて行われ__getitem__
ます。ここで、キャッシュを完全に無効にするメソッドを実装したいと思い (毎回オンザフライでコンテンツを効果的に生成する)、self.disabled
その条件を通知するインスタンス変数を設定していました。
今のアイデアは、__init__
やるべきことでした:
if self.disabled:
self.__dict__['__getitem__'] = self.disabled___getitem__
残念ながら、それは効果がありません。別の形式を使用すると、同じことが起こります。
if self.disabled:
self.__getitem__ = self.disabled___getitem__
動作するかどうかを確認するにはどうすればよいですか? 基本的に、 のデフォルト バージョンに__getitem__
は次のような行があります。
if self.disabled:
raise RuntimeError("This mustn't get called when the cache is disabled!")
使用されるはずのものにはその行がありません。
に変更class Cache(object):
するclass Cache:
と、空のアイテムが得られましたが、例外もありませんでした。
__getitem__
実行時に動的に適切にオーバーライドするにはどうすればよいですか?
注:この回答も試してみましたが、役に立ちませんでした。