[Python中級講座]クラスとは何か

今回はクラスについての概要と定義の方法について解説します。

また、クラスで扱うインスタンス変数やインスタンスメソッドの定義方法も確認します。

クラスとは

クラスとは設計図であり、この設計図をもとにモノ(インスタンス)を作ります。

逆にインスタンスとはクラスという設計図をもとに生成されたモノと言えます。

例えば、整数型(int)は一種のクラスであり、その整数型という設計図をもとに作られた数字がインスタンスです。

他にも不動小数点型(float)もクラスですし、datetimeモジュールにはいくつかのクラスが含まれていたりと、様々な場所でクラスが使用されています。

クラスとして型の情報をまとめると、設計図を再利用することができるのでコードの記述量を減らすことができます。

クラスの構造

クラスは大まかに分類すると情報を保持する変数と処理を行うメソッドで構成されます。

変数はインスタンスがそれぞれ個別の値を持つインスタンス変数と、クラス自体が持つ共通のクラス変数が存在します。

なお、インスタンス変数は属性とも言います。特にモジュールの説明では属性を使用しています。

メソッドはインスタンスが使用する一連の処理であるインスタンスメソッドとクラス自体が持つ共通の処理を示すクラスメソッドが存在します。

以下ではクラスの定義、インスタンス変数とインスタンスメソッドの使い方を確認します。

クラスの定義方法

Pythonではクラスを以下のように定義します。

class クラス名:
    変数の定義やメソッドの定義など...

また、定義したクラスからインスタンスを生成するには以下のように記述します。

インスタンス名_1 = クラス名()
インスタンス名_2 = クラス名()

#インスタンス名_1とインスタンス名_2は異なるインスタンスです。

クラス名は単語の頭文字を大文字にするアッパーキャメルケース記法(upper camel case, UCC)で記述するのが一般的です。

(例)UpperCamelCase, ApplePenなど

インスタンスメソッドの使い方

インスタンスメソッドの定義はクラスに引数selfを持つ関数を定義することで行えます。

また呼び出しは「インスタンス名.インスタンスメソッド名」で行えます。

class クラス名:
    def インスタンスメソッド名(self):
        処理を記述...

#インスタンスの生成
インスタンス名 = クラス名

#インスタンス名.インスタンスメソッド名

使用例は以下の通りです。

#クラスの定義
class Pen:
    def text(self):
      print("This is a pen.")
      


#インクタンスの生成
pen = Pen()

#インスタンスメソッドの呼び出し
pen.text()        #出力例: This is a pen.

上記のプログラムはクラス「Pen」の中にインスタンスメソッド「text」を定義し、呼び出しています。

インスタンス変数の使い方

以下でインスタンス変数の定義と参照方法を確認します。

インスタンス変数の定義

インスタンス変数初期化メソッドを用いて定義することができます。

初期化メソッドは__init__()と記述します。アンダースコア(_)をinitの両隣に二個づつ配置します。

これは特殊なメソッドでインスタンス生成時に必ず呼び出されます。

class クラス名:
    
    def __init__(self, 引数1, 引数2,...):
        self.インスタンス変数名 = 引数1
        self.インスタンス変数名 = 引数2
    #以下同様に続く


#インスタンスの生成
インスタンス名 = クラス名(引数1, 引数2, ...)

initの仮引数として記述したselfはインスタンスを指します。self以降の引数に値が入ります。

インスタンス変数の参照

インスタンス変数の参照方法はクラス内か外かで異なります。

インスタンス変数をクラス外で参照

インスタンス変数をクラス外で参照する場合は以下の通りです。

インスタンス名.インスタンス変数名

以下は使用例です。

#クラスの定義
class Pen:
    def __init__(self,color):
      self.color = color


#インクタンスの生成
pen = Pen("red")

#インスタンス変数の参照
print(pen.color)  

上記のプログラムではインスタンス「pen」の中に存在するインスタンス変数「color」にアクセスしています。

インスタンス変数をクラス内で参照

インスタンス変数はクラス内のインスタンスメソッドで使用することができます。

self.インスタンス変数名

使用例は以下の通りです。

#クラスの定義
class Pen:
    def __init__(self,color):
      self.color = color

    def text(self):
      print(f"This is a {self.color} pen.")


#インクタンスの生成
pen = Pen("red")

#インスタンス変数の参照
pen.text()        #出力例:This is a red pen.

まとめ

今回はクラスの概要と定義の方法を解説しました。

Pythonの標準ライブラリを理解する上でも重要な知識となります。