さて、オブジェクト指向プログラミングの大きな特徴の一つに「継承(けいしょう)」という考え方があるよ。これは、クラスの設計図を別のクラスに「引き継がせる」ことができる、とっても便利な機能なんだ。
例えば、みんなが家を建てるときに、まず「基本的な家の設計図」があって、そこから「広い庭のある家」とか「屋根裏部屋のある家」みたいに、ちょっとずつ違う家を作るイメージだよ。
継承を使うと、すでにあるクラスの設計図(これを「親クラス」または「スーパークラス」と呼ぶよ)の特徴や動きを、新しいクラス(これを「子クラス」または「サブクラス」と呼ぶよ)にそのまま引き継がせることができるんだ。
親クラスのコードをもう一度書く必要がないから、プログラムの量を減らせるし、もし親クラスの機能を変えたいときも、親クラスだけを直せば、それを使っているすべての子クラスに変化が反映されるから、とっても効率的だよね!
例を見てみよう。動物のクラスを考えてみようか。
# 親クラス(Animal)を作るよ
class Animal:
def __init__(self, name):
self.name = name
print(self.name + "が生まれました。")
def eat(self):
print(self.name + "はご飯を食べています。")
# 子クラス(Dog)を作るよ。Animalクラスを継承するよ!
class Dog(Animal): # ここに親クラスの名前を書くんだ
def __init__(self, name, breed):
# 親クラスの__init__を呼び出すよ(これは後で詳しく説明するね)
super().__init__(name)
self.breed = breed
def bark(self):
print(self.name + "がワンワン吠えています!")
my_dog = Dog("ポチ", "柴犬")
my_dog.eat() # 親クラスのeatメソッドが使えるよ!
my_dog.bark() # 子クラス独自のbarkメソッドも使えるよ!
# 出力:
# ポチが生まれました。
# ポチはご飯を食べています。
# ポチがワンワン吠えています!
Dogクラスを作るときに、カッコの中にAnimalと書くことで、Animalクラスの機能を引き継いでいるんだ。これで、DogクラスはAnimalクラスの機能(eat
メソッド)も使えるようになるんだね!
継承は、プログラムを整理して、もっと効率的に作るための、とても大切な考え方だよ!