旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

[Python] selfの型は持ち越す

2009年4月13日

Python-2.5.2で以下を実行したら

class KlassA(object):
def __init__(self, *args, **kwargs):
print "At KlassA"
class KlassB(KlassA):
def __init__(self, *args, **kwargs):
print "At KlassB"
super(self.__class__, self).__init__(*args, **kwargs)
class KlassC(KlassB):
def __init__(self, *args, **kwargs):
print "At KlassC"
super(self.__class__, self).__init__(*args, **kwargs)
if __name__ == "__main__":
c = KlassC()

無限ループ状態になりました・・・。

調べると、selfの型は呼び出したクラスの型を持ち越すようで、
この例だと、KlassB.__init__ 内での super(self.__class__, self) も、
また KlassB を示すことになり、
延々、KlassBのコンストラクタを実行し続けてしまうということでした。

参考) http://d.hatena.ne.jp/ousttrue/20071127

super(self.__class__, self) の使用は、その辺を調べるまでは控えよう・・・。
同じクラス名を複数書かないといけないのは、ちょっと面倒ですが。