エラーでなくワーニング (2)
- jijixi's diary: エラーでなくワーニング (http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20071128#p03)
なるほど。しかし、Rubyのやり方でもHashクラスを書き直しているので他の部分に影響してしまうと思う。結局、使ったら元に戻しておかないといけないと思う。クラスを変更するのではなくインスタンスのみに変更を与えられれば良いのだけれども。Rubyなら特異メソッドは得意なのでできそうではあるがRubyは素人なので分からない…。
書き忘れていたかもしれないが、やりたいことは全てのインスタンスではなく、特定のインスタンスの辞書に対してのみ例外をフックしたい。
jijixiさんのPython版の実装は以下のように書けばすっきりする。ちなみにPythonの関数はreturnのみや何も書かない場合はNoneを返してくれるのでreturn Noneは不要。
class MyDict(dict): def __getitem__(self, key): if key not in self: print 'key not found' else: return dict.__getitem__(self, key)
new.instancemethodを使って辞書のインスタンスオブジェクトに独自定義の__getitem__を追加する方法を試してみたけどAttributeErrorが発生してダメだった。結局dictクラスを継承する方法しかないのかも…。残念。