Python - クラスの継承

クラスの継承

Python でも他のオブジェクト指向言語と同様、クラスを継承することもできます。下記の例では MyClass クラスを継承した MyClass2 サブクラスを定義しています。サブクラスでは、親クラスが持つ変数やメソッドを継承して利用することができます。

class MyClass:
    def hello(self):
        print("Hello")

class MyClass2(MyClass):
    def world(self):
        print("World")

a = MyClass2()
a.hello() # Hello
a.world() # World
継承

サブクラスでは、親クラスのメソッドをオーバライド(上書き)することができます。

class MyClass:
    def hello(self):
        print("Hello")

class MyClass2(MyClass):
    def hello(self):        # 親クラスの hello() メソッドを上書き
        print("HELLO")

a = MyClass2()
a.hello()                   # HELLO
継承

スーパークラス

super() は、親クラス(スーパークラス)を参照します。第一引数にはクラス、第二引数にはインスタンスを指定します。下記の例では、サブクラスのコンストラクタの中で親クラスのコンストラクタを呼び出しています。

class MyClass1(object):
    def __init__(self):
       self.val1 = 123

class MyClass2(MyClass1):
    def __init__(self):
        super(MyClass2, self).__init__()
        self.val2 = 456

a = MyClass2()
print(a.val1) # 123
print(a.val2) # 456
スーパークラス

多重継承

Python では多重継承がサポートされています。下記では、MyClassA, MyClassB 両方を継承する MyClassC を定義しています。

class MyClassA:
    def funcA(self):
        print("MyClassA:funcA")

class MyClassB:
    def funcB(self):
        print("MyClassB:funcB")

class MyClassC(MyClassA, MyClassB):
    pass

a = MyClassC()
a.funcA() # MyClassA のメソッドが使用できる
a.funcB() # MyClassB のメソッドも使用できる
多重継承

関連記事