[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のコンストラクタを実行し続けてしまうということでした。
super(self.__class__, self) の使用は、その辺を調べるまでは控えよう・・・。
同じクラス名を複数書かないといけないのは、ちょっと面倒ですが。
同じクラス名を複数書かないといけないのは、ちょっと面倒ですが。