<一覧に戻る

クラス変数とインスタンス変数の継承

クラス変数とインスタンス変数は、Pythonのクラスにおいてデータを保持するための重要な要素です。継承を使うことで、親クラスのクラス変数とインスタンス変数を子クラスで利用することができます。ここでは、クラス変数とインスタンス変数の継承について学びます。

クラス変数とインスタンス変数の違い

  • クラス変数: クラスに属する変数で、クラス全体で共有されます。すべてのインスタンスで同じ値を持ちます。
  • インスタンス変数: 各インスタンスに属する変数で、インスタンスごとに異なる値を持つことができます。

サンプルコード

以下のサンプルコードでは、Animalクラスを親クラスとして、Dogクラスを子クラスとして定義します。この例では、クラス変数とインスタンス変数がどのように継承されるかを示します。

class Animal:
    # クラス変数
    species = "Animal"

    def __init__(self, name):
        # インスタンス変数
        self.name = name

    def display_info(self):
        print(f"{self.species}: {self.name}")


class Dog(Animal):
    # クラス変数をオーバーライド
    species = "Dog"

    def __init__(self, name, breed):
        # 親クラスのコンストラクタを呼び出す
        super().__init__(name)
        # 子クラスのインスタンス変数
        self.breed = breed

    def display_info(self):
        # 親クラスのメソッドを呼び出し
        super().display_info()
        print(f"Breed: {self.breed}")


# インスタンスを作成
animal = Animal("Generic Animal")
dog = Dog("Rex", "Golden Retriever")

# 情報を表示
animal.display_info()
dog.display_info()

# クラス変数の確認
print(f"Animal species: {Animal.species}")
print(f"Dog species: {Dog.species}")

コード解説

  1. Animalクラス:
  2. species というクラス変数を定義しています。すべての Animal インスタンスはこの値を共有します。
  3. __init__ メソッドで、name というインスタンス変数を初期化します。
  4. display_info メソッドで、クラス変数とインスタンス変数の情報を表示します。

  5. Dogクラス:

  6. Animal クラスを継承しています。
  7. species クラス変数をオーバーライドして、Dog クラス専用の値を設定しています。
  8. __init__ メソッドで、親クラスのコンストラクタを呼び出し (super().__init__(name))、さらに breed というインスタンス変数を追加しています。
  9. display_info メソッドで、親クラスの display_info メソッドを呼び出し、さらに犬種の情報を表示しています。

  10. インスタンスの作成と表示:

  11. AnimalDog のインスタンスを作成し、それぞれの情報を表示します。
  12. クラス変数を確認して、親クラスと子クラスでの値の違いを確認します。

まとめ

クラス変数とインスタンス変数の継承を理解することで、オブジェクト指向プログラミングの基本的なコンセプトをより深く理解できます。継承を使うことで、コードの再利用が促進され、クラス間の関係を明確にすることができます。

出力結果: