2008-12-03
■[Python] 親クラスのコンストラクタ
http://d.hatena.ne.jp/w_o/20081203#p1
Pythonで親クラスの__init__を呼ぶルールって酷いと思うのだけど、これPython信者たちはなんて言って褒めてるのかな…
* super(Type, self)というのが意味不明すぎ
* 自分のクラスを書かないといけない
* 忘れると死亡
それは本当にPythonなのか??super(Type, self) なんて使ったこと無かったけど、確かにそういう書き方もできた。それでも、一般的ではない。多重継承できる言語で super とか判りにくくて仕方ない。
>>> class Foo(object): ... def __init__(self): ... print "Foo.__init__" ... >>> class Bar(Foo): ... def __init__(self): ... print "Bar.__init__" ... Foo.__init__(self) ... >>> Bar() Bar.__init__ Foo.__init__
Pythonの __init__ は、そのほかのメソッドと同じく、ただの関数。コンストラクタだからって何も特別なことはしない。構文上、__init__ はほかの関数に比べて何の特別扱いも受けない。
>>> def init(self): ... print "initializing ", str(type(self)) ... >>> class Foo(object): ... pass ... >>> f = Foo() >>> Foo.__init__ = init >>> f = Foo() initializing <class '__main__.Foo'> >>> f.__init__() initializing <class '__main__.Foo'> >>> g = f.__init__ >>> g() initializing <class '__main__.Foo'>
トラックバック - http://d.hatena.ne.jp/methane/20081203/1228330596
リンク元
- 20 http://d.hatena.ne.jp/w_o/
- 4 http://d.hatena.ne.jp/keyword/Python
- 4 http://reader.livedoor.com/reader/
- 3 http://d.hatena.ne.jp/w_o/20081204
- 3 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=jm4&q=python+path&btnG=検索&lr=lang_ja
- 2 http://d.hatena.ne.jp/w_o/20081203
- 2 http://www.google.co.jp/search?hl=ja&lr=lang_ja&client=firefox-a&rls=org.mozilla:ja:official&q=queue+プログラミング&start=10&sa=N
- 2 http://www.google.com/reader/view/
- 1 http://a.hatena.ne.jp/fd0/
- 1 http://a.hatena.ne.jp/h-hirai/

