PythonでClassの__init__メソッドの継承を試す。

PythonでClassのインスタンス化する時のコンストラクタである__init__メソッドの継承を試して見ました。

まずFirstクラスをインスタンス化するとxとyの値が設定されます。次にFirstクラスを親とするSecondクラスをインスタンス化した場合にxは親を継承、yはSecond用の値で上書き、さらにzを新規追加するという処理をしています。

ソースコード

class First(object):
    def __init__(self):
        self.x = "first init x"
        self.y = "first init y"

class Second(First):
    def __init__(self):
        First.__init__(self)    # SuperClassであるFirstの__init__メソッドを実行
        self.y = "second init y"    # First.yの値をSecond.yの値で上書き
        self.z = "second init z"    # Firstクラスに存在しない値をSecond.zとして追加する

if __name__ == '__main__':
    hoge = First()
    print "hoge.x: %s" % hoge.x
    print "hoge.y: %s" % hoge.y

    fuga = Second()
    print "fuga.x: %s" % fuga.x
    print "fuga.y: %s" % fuga.y
    print "fuga.z: %s" % fuga.z

実行結果

macbook:lab ox$ python hoge.py 
hoge.x: first init x
hoge.y: first init y
fuga.x: first init x    # 継承
fuga.y: second init y    # 上書き
fuga.z: second init z    # 新規追加

うーん便利。