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