【Python】クラスメソッド、スタティックメソッドの使いどころ

雑学

更新月:2025/1
Pythonにおけるクラスメソッド、スタティックメソッドの使いどころが分かる記事になります。

Python メソッドの使い方: クラスメソッド、スタティックメソッド、一般メソッド

Python には、クラスメソッド、スタティックメソッド、一般メソッドの 3 つの異なる種類のメソッドがあります。これらは、どのように使われるかによって役割が異なります。これらのメソッドを理解することは、Python を使ったオブジェクト指向プログラミングにおいて非常に重要です。

メソッドの種類と特徴

  • 一般メソッド(インスタンスメソッド)
    特徴: 通常のメソッドで、クラスのインスタンスに関連付けられます。インスタンスメソッドは、インスタンス変数(self)にアクセスできます。
    使い方: インスタンスを作成してから呼び出します。
  • クラスメソッド
    特徴: クラス自体に関連付けられ、クラス変数にアクセスできます。インスタンスではなく、クラスそのものにアクセスします。
    使い方: インスタンスではなく、クラス名を使って呼び出します。第一引数にクラス(cls)が渡されます。
  • スタティックメソッド
    特徴: クラスにもインスタンスにも依存しません。インスタンスやクラスの状態にアクセスしない単独の関数のようなメソッドです。
    使い方: インスタンスやクラス名を使って呼び出すことができますが、インスタンスやクラスの状態には関与しません。

各メソッドを比較した表

メソッドタイプ 定義方法 第一引数 インスタンス/クラス変数にアクセス 呼び出し方
一般メソッド(インスタンスメソッド) def method(self): self インスタンス変数にアクセス可能 インスタンスから呼び出し
クラスメソッド @classmethod def method(cls): cls クラス変数にアクセス可能 クラスから呼び出し
スタティックメソッド @staticmethod def method(): 引数なし インスタンスやクラス変数にアクセスなし クラスまたはインスタンスから呼び出し

各メソッドを使用するべきケース

1. インスタンスを作らず外部から直接メソッドを呼び出すケース

この場合、クラスメソッドスタティックメソッドが適しています。一般メソッドはインスタンスを作らないと呼び出せないため、インスタンスなしでメソッドを呼び出したい場合には使えません。

  • クラスメソッド: クラスに関連した処理を行う場合(例えば、クラス変数を操作する場合)。
  • スタティックメソッド: クラスやインスタンスに依存しない処理を行う場合(例えば、入力の検証やユーティリティ関数)。

例:

class MyClass:
    @classmethod
    def class_method(cls):
        print("クラスメソッド")

    @staticmethod
    def static_method():
        print("スタティックメソッド")

# インスタンスを作らずに呼び出し
MyClass.class_method()  # クラスメソッド
MyClass.static_method()  # スタティックメソッド

2. クラスメソッドもしくはスタティックメソッドから呼び出すローカルメソッド

クラスメソッドやスタティックメソッドから、別のメソッドを呼び出す場合、インスタンスの状態に依存しないので、スタティックメソッドが適切です。もし呼び出したいメソッドがインスタンスの状態に依存する場合、クラスメソッド一般メソッドを呼び出します。

例:

class MyClass:
    @classmethod
    def class_method(cls):
        print("クラスメソッド")
        cls.helper_method()

    @staticmethod
    def static_method():
        print("スタティックメソッド")
        MyClass.helper_method()

    @staticmethod
    def helper_method():
        print("ヘルパーメソッド(スタティックメソッド)")

# クラスメソッドとスタティックメソッドから呼び出し
MyClass.class_method()  # クラスメソッド内からヘルパーメソッドを呼び出す
MyClass.static_method()  # スタティックメソッド内からヘルパーメソッドを呼び出す

まとめ

  • 一般メソッド: インスタンスに依存し、インスタンスの状態を操作するために使用します。
  • クラスメソッド: クラスに依存し、クラスの状態(クラス変数)を操作するために使用します。
  • スタティックメソッド: インスタンスやクラスの状態に依存しない、単独の処理を行うために使用します。

各メソッドの使い分けを理解することで、より適切なクラス設計が可能になります。

関連記事

外部リンク

生成AIメモ

  • 利用AI:ChatGPT 4o mini、一部利用
  • プロンプト1:Pythonにおいてクラスメソッド、スタティックメソッド、デコレーターを使わない一般メソッドの利用方法の違いを題材とします。
    初学者に向けて、説明する文章を作成して欲しいです。

    以下についても、付け加えて説明してほしいです。
    ・3種を比較する表を作成する。
    ・以下のケースはどのメソッドを利用するか
     1. インスタンスを作らず外部から直接メソッドを呼び出すケース
     2. クラスメソッドもしくはスタティックメソッドから呼び出すローカルメソッド

  • プロンプト2:先程の内容をhtml形式(style使わず)で示してください

内容チェック済。