[Python]クラス(class)の基本を理解する

先生

クラス定義で使われるclassついて紹介します。

「クラス」とは

クラスは、変数と関数をひとまとめにできる仕組みです。コーディングが効率的となり、コードを整理しやすくなります。

クラス定義および使用方法

実装例

最初にクラス定義と使用方法について例を記載します。こちらをベースに説明していこうと思います。

# クラスを定義
class LearnClass:
    def __init__(self, var1, var2):
        self.var1 = var1
        self.var2 = var2
        ...

    def showVarValue(self, var3):
        print(f"インスタンス変数var1:{self.var1}")
        print(f"インスタンス変数var2:{self.var2}")
        print(f"変数var3:{var3}")

# クラスのインスタンスを作成
sample_class = LearnClass("変数A", "変数B")

# メソッドを実行
sample_class.showVarValue("変数C")

# 出力
# インスタンス変数var1:変数A
# インスタンス変数var2:変数B
# 変数var3:変数C

インスタンスとは

クラス定義を呼び出して、変数へ格納することで、クラスのインスタンスというものを作成することができます。

イメージとしては、(超個人的なイメージでので参考までに)クラス定義自体は値が入っていない箱のようなもので、そこに引数などを指定して呼び出してあげるとクラス定義に値が入った状態になります。これをインスタンスと言います。

クラスの定義方法

基本的には以下のようにクラス名と__init__に必要な引数を設定します。この__init__メソッドはインスタンスを作成するときに動くものになります。

第一引数をselfとし、以下のようにself.インタンス変数を定義します。

class クラス名:
    def __init__(self, クラス引数1, クラス引数2):
        self.インスタンス変数1 = クラス引数1
        self.インスタンス変数2 = クラス引数2
     ...

このインスタンス変数は必須ではありませんが、classインスタンス内の関数で__init__メソッドの引数で渡された変数を使用したい場合は必要です。

クラス内関数の定義方法

クラス内の関数定義では、第一引数にselfを指定します。

class クラス名:
    def __init__(self, クラス引数1, クラス変数2):
        self.インスタンス変数1 = クラス変数1
        self.インスタンス変数2 = クラス変数2
     ...

    def 関数名(self, 引数1):
        処理

インスタンス変数を関数内で使用する場合は__init__で定義したように、selfをつける必要があります。

# インスタンス変数var1の場合
print(f"インスタンス変数var1:{self.var1}"

クラスインスタンスの作成方法

クラス名と__init__メソッドに指定した引数を指定することで、インスタンスを作成することができます。

変数=クラス名(クラス引数1,クラス引数2)

クラス内関数の実行方法

インスタンスが格納されている変数と関数名、必要であれば引数を指定することで関数を実行できます。

変数.関数名(引数1)

クラス継承について

クラス継承の実装方法

クラスは別のクラスで継承させることができます。要はクラス定義をベースに新しいクラスを定義することで、ベースとしたクラス定義も使用することができます。

継承されたクラス側のインスタンス変数は、super().__init__に引数を渡すことで定義できます。

class クラス名1:
    def __init__(self, クラス引数1, クラス変数2):
        self.インスタンス変数1 = クラス変数1
        self.インスタンス変数2 = クラス変数2
      ...
    
    def 関数名(self, 引数1):
        処理

class クラス名2(クラス名1):
    def __init__(self, クラス引数1, クラス変数2, クラス引数3):
        super().__init__(クラス引数1, クラス変数2)
        self.インスタンス変数3 = クラス引数3

クラス継承の実装例

下記にクラス継承の実装例を紹介します。

# クラスを定義
class LearnClass:
    def __init__(self, var1, var2):
        self.var1 = var1
        self.var2 = var2
        ...

    def showVarValue(self, var3):
        print(f"インスタンス変数var1:{self.var1}")
        print(f"インスタンス変数var2:{self.var2}")
        print(f"インスタンス変数var2:{self.var2}")
        print(f"変数var3:{var3}")

class LearnClass2(LearnClass):
    def __init__(self, var1, var2, var3):
        super().__init__(var1, var2)
        self.var3 = var3
        ...

    def showVarValue2(self, var4):
        print(f"インスタンス変数var1:{self.var1}")
        print(f"インスタンス変数var2:{self.var2}")
        print(f"インスタンス変数var3:{self.var3}")
        print(f"変数var3:{var4}")

# クラスのインスタンスを作成
sample_class = LearnClass2("変数A", "変数B", "変数C")

# メソッドを実行
sample_class.showVarValue2("変数D")

# 出力
# インスタンス変数var1:変数A
# インスタンス変数var2:変数B
# インスタンス変数var3:変数C
# 変数var3:変数D

まとめ

以上です。今回はクラスの定義方法や使用方法について紹介しました。

特にクラスの継承についてはライブラリのクラスを継承することも多いので、その辺りも別記事で紹介しようと思います。