Pythonクラス使い方 パート3

python

クラスの継承

クラスの継承とは他の関数の機能を引き継いだ状態でクラスを作成できます。似た処理を複数のクラスで使いたい場合に、共通処理を持つクラスを作成し、それを各クラスで継承することでコード量を減らすことができます。

継承はクラスを定義する際に、class クラス名(親のクラス名)と定義します。

# 継承元
class Test(object):
    def test1(self):
        print('test1')
# 継承先
class Test2(Test):
    def test2(self):
        print('test2')

test = Test2()
test.test1()
test.test2()
==================以降出力
test1
test2

一つ目のクラスは継承元のクラスで親クラスやベースクラスにあたります。二つ目のクラスは継承先で()の中に親のクラス名が記載されているのが分かると思います。継承先のクラスを定義し、継承元のクラスのtest1()を呼べていることが分かると思います。

親クラスの関数のオーバーライド

オーバーライドとは上書きするといったイメージです。なので、親クラスの関数をオーバーライドするとは親クラス内で定義している関数を上書きすることです。

具体的なやり方は、親クラスで上書きしたい関数を継承先の子クラスでも定義し必要な処理を実装します。

# 継承元
class Test(object):
    def test1(self):
        print('test1')
    def test3(self):
        print('test1')
# 継承先
class Test2(Test):
    def test2(self):
        print('test2')
    def test3(self):
        print('test2')

test = Test2()
test.test1()
test.test2()
test.test3()
==================以降出力
test1
test2
test2

継承元の親クラスでtest3を新たに作成しました。さらに、継承先の子クラスでも同様の関数名であるtest3で処理追加しました。これがオーバーライドです。今回、継承先の子クラスで定義したtestからtest3を呼ぶと継承元でなく継承先の出力が出ていることが分かると思います。

オーバーライドのやり方にはもう一つあります。上記の方法では関数を全て上書きしてしまいますが、継承元の親クラスの処理は残しつつ追加する方法もあります。

# 継承元
class Test(object):
    def test1(self):
        print('test1')
    def test3(self):
        print('test1-3')
# 継承先
class Test2(Test):
    def test2(self):
        print('test2')
    def test3(self):
        super().test3()
        print('test2-3')

test = Test2()
test.test1()
test.test2()
test.test3()
==================以降出力
test1
test2
test1-3
test2-3

オーバーライドする際に、継承元の親クラスの関数をsuper().を付けることで呼び出せます。出力を見ると親クラスの処理結果であるtest1-3が出力された後に、継承先で追加したtest2-3出力されているのが分かると思います。

コメント

タイトルとURLをコピーしました