タグ

ブックマーク / hiratara.hatenadiary.jp (2)

  • Visitorパターンで使われている"ダブルディスパッチ"とは? - Pixel Pedals of Tomakomai

    Wikipediaのダブルディスパッチの解説が、とてもいいこと書いてあるんですがどうもわかりにくかったので、Javaで簡潔に書き直してみました。 概要 メソッドのオーバーロードでは昔以下で書いたように動的なメソッド選択ができません。 オーバーロードはコンパイル時にメソッドが選択、つまり、変数の宣言されている型で判断されているようです。 オーバーロードとオーバーライドの混沌 ダブルディスパッチによって、オーバーロードされたメソッドをruntimeに動的に選択できるようになります。 ダブルディスパッチで解決できる問題例 次のようなコードを書くと、適切なexecuteが呼べません(コンパイルできない)。これは、メソッドのオーバロードは静的に評価されるためです。 interface MyClassB {} class MyClassB1 implements MyClassB {} class M

    Visitorパターンで使われている"ダブルディスパッチ"とは? - Pixel Pedals of Tomakomai
    zorio
    zorio 2010/11/04
    なるほど。ダブルディスパッチはオーバーロードが静的に判断される問題を解決するためにあるのか。
  • 間違いやすいPythonのクラス変数とインスタンス変数 - Pixel Pedals of Tomakomai

    すごい昔のエントリですが、コメントできなくなってたんでTBで。 やっぱり、インスタンス変数(クラス変数も!)は先頭で宣言しないと気持ち悪い。だから、初期化の必要がなくても以下のように書いておく。 class Hoge: #名前 name = None def __init__(self, name): self.name = name Pythonのインスタンス変数 気持ちはとてもとてもよくわかるんですけど、class宣言の中に変数を置いてもそれはあくまでもclassオブジェクトに紐づく値となってしまい、インスタンスの変数とはなりません。もちろん、わかってて使うなら大丈夫ですけど。 >>> class Hoge(object): ... foo = 10 >>> hoge1 = Hoge() >>> Hoge.__dict__.items() [('__dict__', <attribut

    間違いやすいPythonのクラス変数とインスタンス変数 - Pixel Pedals of Tomakomai
    zorio
    zorio 2010/05/24
  • 1