継承
継承(inheritance)は、Pythonにおけるオブジェクト指向プログラミングの基本的な概念です。この概念は、コードの再利用性を高め、階層的なクラス構造を構築するために利用されます。
継承の基本的な概念
継承には主に以下の2つのクラスが関与します:
- 親クラス(基底クラス):継承の元となるクラスで、他のクラスに機能を提供します。
- 子クラス(派生クラス):親クラスから継承された属性やメソッドを持ち、新しい機能を追加することができます。
Pythonでは、クラスの定義において継承する親クラスを指定することで継承を実現します。例えば:
class ParentClass:
def __init__(self, name):
self.name = name
def greet(self):
print(f"Hello, I am {self.name}")
class ChildClass(ParentClass):
def __init__(self, name, age):
super().__init__(name)
self.age = age
def greet(self):
super().greet()
print(f"I am {self.age} years old")
# 使用例
parent = ParentClass("Alice")
parent.greet() # Output: Hello, I am Alice
child = ChildClass("Bob", 10)
child.greet() # Output: Hello, I am Bob
# I am 10 years old
継承の利点
-
コードの再利用性:親クラスで定義された属性やメソッドを子クラスで再利用することができます。これにより、同じような機能を持つ複数のクラスを効率的に実装できます。
-
階層化された構造:継承を使うことで、より複雑で階層的なクラスの関係を表現できます。例えば、動物 → 哺乳類 → 犬といったように、一般的な機能を親クラスに、特有の機能を子クラスに記述することができます。
メソッドのオーバーライドとsuper()
-
メソッドのオーバーライド:子クラスでは、親クラスのメソッドを同じ名前で再定義することができます。これにより、親クラスの振る舞いをカスタマイズすることが可能です。
-
super()関数:子クラスから親クラスのメソッドや属性にアクセスするための特殊な関数です。
super()
を使用することで、親クラスのメソッドを呼び出すことができます。
class ChildClass(ParentClass):
def __init__(self, name, age):
super().__init__(name)
self.age = age
def greet(self):
super().greet()
print(f"I am {self.age} years old")
多重継承
Pythonでは、複数のクラスから継承することができます(多重継承)。ただし、多重継承を使う際にはクラスの階層構造や名前衝突に注意が必要です。多重継承の例:
class A:
def method_A(self):
print("Method A")
class B:
def method_B(self):
print("Method B")
class C(A, B):
def method_C(self):
print("Method C")
# CクラスはAとBのメソッドを継承する
継承を使うことで、効率的で再利用可能なコードを書くことができますが、過度の継承の使用はクラスの複雑さを増す可能性があるため、適切な設計が重要です。