Python クラスの作り方

Pythonはオブジェクト指向のコードを実装できるプログラミング言語です。
その中核でもあるクラスの作り方について説明します。


基本の書き方

  • class クラス名: でクラスを定義し、その中に変数、メソッドを記載する
  • メソッド(クラス内の関数)の第一引数は self にする
  • クラス名(引数) でクラスのインスタンスを作ることができる


以下の例では、TestClassというクラスを定義し、その中に、class_funcというメソッドを定義しました。

class TestClass: # クラスの定義
    def class_func(self): # メソッド
        print('This is class_function')
    

x = TestClass() # インスタンス生成
x.class_func()  # class_funcメソッドの呼び出し
>> This is class_function

コンストラクタ

  • def __init__(self, 引数): で定義するメソッドはコンストラクタと呼ばれる
  • コンストラクタはクラスが生成されるタイミングで必ず実行されるメソッド
  • 通常、クラスのメソッドの中で一番はじめに定義する(一番上に書く)
class TestClass:
    def __init__(self):
        self.name = 'YAMADA'

x = TestClass() # インスタンス生成
print(x.name)
>> YAMADA

データ属性 (クラス変数・インスタンス変数)

クラスに属している変数をデータ属性といい、クラス変数とインスタンス変数があります。

  • クラス変数: そのクラスの全インスタンスで共通の変数。クラスの中のメソッドの外で定義する。呼び出しは クラス名.変数名
  • インスタンス変数: クラス内の変数だが、インスタンスごとに異なる。クラスの中のメソッド内で定義し、変数の定義を self.変数名 = とする。コンストラクタ内で定義するのが一般的。呼び出しは インスタンス名.変数名
class TestClass:
    x_1 = 100
    def __init__(self):
        self.x_2 = 200

test_class = TestClass()

print(TestClass.x_1)  # クラス変数の呼び出し
print(test_class.x_2) # インスタンス変数の呼び出し
>> 100
>> 200

クラス変数もインスタンス変数も、外から変更することができます。

インスタンス名.クラス変数名 とすると、クラス変数が参照されますが、インスタンス名.クラス変数名=値 で外から定義した場合、インスタンス変数を生成し、以降はそちらが参照されることになります。

class TestClass:
    x_1 = 100

test_class = TestClass()

print(TestClass.x_1)
print(test_class.x_1)
>> 100 # クラス変数が参照される
>> 100 # クラス変数が参照される

test_class.x_1 = 0 # x_1というインスタンス変数を生成

print(TestClass.x_1)  
print(test_class.x_1)
>> 100  # クラス変数が参照される
>> 0    # インスタンス変数が参照される

デストラクタ

コンストラクタとは逆で、インスタンスが消滅する時に呼び出されるメソッドです。__del__(self, 引数): で定義します。

class TestClass:
    def __init__(self):
        print('コンストラクタだよ!')
    def __del__(self):
        print('デストラクタだよ!')

test_class = TestClass() # インスタンス生成
>> コンストラクタだよ!

del test_class # インスタンス消滅
>> デストラクタだよ!

Python 公式ドキュメント

関連記事

このエントリーをはてなブックマークに追加