memcacheではまったこと
ちょっとした用途でlistクラスのサブクラスを作った。
で、それをmemcacheに入れて使おうとした。
そしたら「そのクラスに、○○という属性はない」とかいうエラーが出るようになった。
調べてみると、以下のような感じ。
- gaeのmemcacheはpickleを使う。
- unpickleしてデータを復元する時、__init__()は呼ばない。
- リストなどのデータの復元はobj.append()を使ったりする。
そう、そのサブクラスはオブジェクトの○○プロパティーを見てappendメソッドの挙動を変える、というものだった。
つまり、その時点でまだオブジェクトにくっついてない○○という属性を参照できない、というエラーだった。
で、カスタマイズしたappendメソッドを、○○という属性がなければ普通にappendという処理に変更。
ソースはこんな感じ。