クラスの継承

継承

クラス定義と継承

既存クラスを継承したクラスを定義する場合は、class文に親クラスを指定します。

親クラスを指定しない場合、クラスはobjectクラスを継承したクラスとなります。

class Base:
    def func1(self):
        print('func1')
        
class Sub(Base):
    def func2(self):
        print('func2')

obj = Sub()
obj.func1()
obj.func2()

上のサンプルでは、継承によりSubクラスのfunc2に加え、親クラスのfunc1も呼び出すことができていることを確認することができます。

親クラスのメソッドの呼び出し

親クラスのメソッドを呼び出す際は、super()メソッドを使用します。

class Base:
    def func1(self):
        print('func1')
        
class Sub(Base):
    def func2(self):
        super().func1() # 親クラスのメソッドを呼び出し
        print('func2')

obj = Sub()
obj.func2()

オーバーライド

また、派生クラスで親クラスのメソッドをオーバーライドすることもできます。

class Base:
    def func1(self):
        print('func1')
        
class Sub(Base):
    def func1(self): # 親クラスのメソッドをオーバーライド
        print('sub func2')

obj = Sub()
obj.func1()

このサンプルでは、子クラスにてfunc1の処理が書き換えられていることが確認できます。

多重継承継承

pythonでは多重継承することができます。

多重継承をする場合は、class文で親クラスをカンマ区切りで指定します。

class Base1:
    def func1(self):
        print('func1')

class Base2:
    def func2(self):
        print('func2')
    
class Sub(Base1, Base2):
    def func(self):
        super().func1()
        super().func2()

obj = Sub()
obj.func()

複雑な継承をすると名前の衝突などの考慮が必要ですので、個人的には初心者のうちはコンポーネント化することを勧めます。