python class 継承/クラスのオブジェクト指向

Pythonのクラス継承

Pythonのクラス継承について学ぼう
Pythonのクラス継承とは?

クラス継承とは?

Pythonのクラス継承とは、既存のクラスを元に、新しいクラスを定義する機能です。

クラス継承を使用すると、既存のクラスの機能を拡張したり、変更したりすることができます。

クラス継承の構文

クラス継承の構文は、以下のとおりです。

class 子クラス名(親クラス名):
    # 子クラスの定義

例えば、以下のコードは、Animalクラスを継承したDogクラスを定義しています。

class Animal:
    def speak(self):
        print("I am an animal.")

class Dog(Animal):
    def bark(self):
        print("Woof!")

このコードでは、Animalクラスを継承したDogクラスを定義しています。Dogクラスは、Animalクラスのspeak()メソッドを継承しています。また、Dogクラスは、独自のbark()メソッドを定義しています。

クラス継承を使用する際は、以下の注意点があります。

  • 子クラスは、親クラスのすべてのメンバを継承する
  • 子クラスは、親クラスのメソッドをオーバーライドできる
  • 子クラスは、親クラスのメソッドを直接呼び出すことができる

関連 python コンストラクタ/定義のclassのメソッド

クラス継承のメリット

クラス継承のメリット

Pythonのクラス継承のメリットは、以下のとおりです。

  • 既存のクラスの機能を拡張できる

クラス継承を使用すると、既存のクラスの機能を拡張することができます。例えば、Animalクラスを継承したDogクラスを定義すると、DogクラスはAnimalクラスの機能をすべて継承し、さらに独自の機能を追加することができます。

  • 既存のクラスを変更することなく、新しい機能を追加できる

クラス継承を使用すると、既存のクラスを変更することなく、新しい機能を追加することができます。例えば、Animalクラスのspeak()メソッドをオーバーライドしたDogクラスを定義すると、Dogクラスのspeak()メソッドは、Animalクラスのspeak()メソッドとは異なる動作をすることができます。

  • コードの再利用性を高めることができる

クラス継承を使用すると、コードの再利用性を高めることができます。例えば、Animalクラスを定義して、動物の共通の機能を実装しておくと、DogクラスやCatクラスなどの子クラスを定義する際に、Animalクラスの機能を再利用することができます。

クラス継承のオーバーライド

オーバーライドとは

Pythonのクラスのオーバーライドとは、親クラスで定義されているメソッドを、子クラスで上書きすることです。親クラスのメソッドの動作を子クラスで変更することができます。

以下のコードは、Animalクラスを継承したDogクラスを定義しています。Dogクラスは、Animalクラスのspeak()メソッドをオーバーライドしています。

class Animal:
    def speak(self):
        print("I am an animal.")

class Dog(Animal):
    def speak(self):
        print("Woof!")

dog = Dog()
dog.speak()

このコードの出力は、以下のとおりです。

Woof!

スーパークラスのメソッドを直接呼び出す

スーパークラスのメソッドを直接呼び出す

以下のコードは、Animalクラスを継承したDogクラスを定義しています。Dogクラスは、Animalクラスのspeak()メソッドを直接呼び出しています。

class Animal:
    def speak(self):
        print("I am an animal.")

class Dog(Animal):
    def bark(self):
        self.speak()
        print("Woof!")

dog = Dog()
dog.bark()

このコードの出力は、以下のとおりです。

I am an animal.
Woof!

多重継承

多重継承

Pythonでは、複数のクラスを継承することもできます。これを多重継承と呼びます。

以下のコードは、AnimalクラスとDogクラスを継承したCatクラスを定義しています。

class Animal:
    def speak(self):
        print("I am an animal.")

class Dog:
    def bark(self):
        print("Woof!")

class Cat(Animal, Dog):
    pass

cat = Cat()
cat.speak()
cat.bark()

このコードの出力は、以下のとおりです。

I am an animal.
Woof!

継承関係の確認

クラス継承関係を確認するには、issubclass()関数を使用します。

以下のコードは、Animalクラスを継承したDogクラスとCatクラスを定義しています。

class Animal:
    pass

class Dog(Animal):
    pass

class Cat(Animal):
    pass

print(issubclass(Dog, Animal))
print(issubclass(Cat, Animal))

このコードの出力は、以下のとおりです。

True
True