カテゴリ: Python 更新日: 2026/03/04

Pythonのクラスメソッドと静的メソッドの違いとは?初心者でも迷わない使い分けガイド

Pythonのクラスメソッドと静的メソッドの違いとは?使い分けガイド
Pythonのクラスメソッドと静的メソッドの違いとは?使い分けガイド

先生と生徒の会話形式で理解しよう

生徒

「Pythonでクラスを勉強していたら、クラスメソッドと静的メソッドって出てきました。正直、何が違うのかよく分かりません…」

先生

「Pythonのオブジェクト指向では、メソッドの種類を理解すると、プログラムがぐっと読みやすくなります。」

生徒

「普通のメソッドとも違うんですよね?」

先生

「そうですね。クラスメソッドと静的メソッドは、どちらもクラスに関係しますが、役割がはっきり分かれています。順番に見ていきましょう。」

1. Pythonのクラスとメソッドの基本

1. Pythonのクラスとメソッドの基本
1. Pythonのクラスとメソッドの基本

Pythonのクラスとは、データと処理をまとめた設計図のようなものです。例えば「たい焼きの型」を想像してください。型がクラスで、実際に焼いたたい焼きがオブジェクトです。

メソッドは、そのクラスが持つ動作を表します。普通のメソッドは「オブジェクト自身」を操作しますが、クラスメソッドと静的メソッドは少し考え方が違います。

ここを理解することが、Pythonのオブジェクト指向を理解する第一歩になります。

2. クラスメソッドとは何か

2. クラスメソッドとは何か
2. クラスメソッドとは何か

クラスメソッドは、クラスそのものに関係する処理を書くためのメソッドです。特徴は、第一引数に cls を受け取り、クラス全体の情報を扱える点です。

クラスメソッドを使うときは、@classmethod というデコレータを使います。デコレータとは、関数やメソッドに特別な役割を与えるための目印です。


class User:
    count = 0

    def __init__(self):
        User.count += 1

    @classmethod
    def show_count(cls):
        print(f"ユーザー数は{cls.count}人です")

この例では、何人のユーザーが作られたかをクラス全体で管理しています。個々のユーザーではなく、全体の状態を見る処理に向いています。

3. 静的メソッドとは何か

3. 静的メソッドとは何か
3. 静的メソッドとは何か

静的メソッドは、クラスに関係はあるものの、クラスやオブジェクトの状態を使わない処理を書くためのメソッドです。

第一引数に selfcls を持たず、普通の関数に近い感覚で使えます。定義するときは @staticmethod を使います。


class MathTool:
    @staticmethod
    def add(a, b):
        return a + b

このように、計算処理など「クラスに関連する便利な機能」をまとめたいときに静的メソッドが役立ちます。

4. 普通のメソッドとの違い

4. 普通のメソッドとの違い
4. 普通のメソッドとの違い

普通のメソッドは、オブジェクト自身のデータを扱います。そのため、第一引数に self を受け取ります。


class Dog:
    def __init__(self, name):
        self.name = name

    def bark(self):
        print(f"{self.name}が鳴きました")

一方で、クラスメソッドは「クラス全体」、静的メソッドは「処理のまとまり」を意識して使います。ここが一番大きな違いです。

5. クラスメソッドが向いている場面

5. クラスメソッドが向いている場面
5. クラスメソッドが向いている場面

クラスメソッドは、共通ルールや設定を扱うときに便利です。例えば、特定の条件でオブジェクトを作成する場合などです。


class Product:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    @classmethod
    def free_product(cls, name):
        return cls(name, 0)

このように、クラスメソッドは「別の作り方」を提供する役割としてよく使われます。

6. 静的メソッドが向いている場面

6. 静的メソッドが向いている場面
6. 静的メソッドが向いている場面

静的メソッドは、クラスに関係する補助的な処理に向いています。オブジェクトの状態に依存しない点が特徴です。


class StringUtil:
    @staticmethod
    def is_empty(text):
        return text == ""

このような処理は、クラスの外に関数として書くこともできますが、意味的にまとめたい場合に静的メソッドが選ばれます。

7. 初心者が迷いやすいポイント

7. 初心者が迷いやすいポイント
7. 初心者が迷いやすいポイント

初心者がつまずきやすいのは、「とりあえず静的メソッドでいいのでは?」と考えてしまう点です。しかし、クラス全体の情報を使う場合はクラスメソッドの方が自然です。

逆に、クラスやオブジェクトの状態を使わないなら、静的メソッドを選ぶとコードがすっきりします。

8. クラスメソッドと静的メソッドの考え方まとめ

8. クラスメソッドと静的メソッドの考え方まとめ
8. クラスメソッドと静的メソッドの考え方まとめ

クラスメソッドは「クラス目線」、静的メソッドは「機能目線」で考えると理解しやすくなります。

Pythonのオブジェクト指向では、この使い分けができると、読みやすく保守しやすいコードになります。最初は難しく感じますが、例を見ながら少しずつ慣れていきましょう。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
カテゴリの一覧へ
新着記事
New1
Python
Pythonの定数を定義する方法!慣習とモジュールを活用した書き方
New2
Python
Pythonのカプセル化とは?private変数とプロパティの活用方法をやさしく解説
New3
Python
Pythonの継承とは?親クラス・子クラスの関係とメソッドオーバーライドをやさしく解説
New4
Python
Pythonのインスタンス変数とクラス変数の違い!selfの使い方を初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonのfinally文を徹底解説!例外発生時でも実行される処理の書き方と使い方
No.2
Java&Spring記事人気No2
PHP
PHP の MySQL にデータを挿入する方法(INSERT 文の実行)を完全解説!初心者向けガイド
No.3
Java&Spring記事人気No3
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.4
Java&Spring記事人気No4
PHP
PHPの配列をソートする方法!sort, rsort, asort, ksortの使い方を丁寧に解説します!
No.5
Java&Spring記事人気No5
PHP
PHPの可変長引数(...$args)の使い方を完全ガイド!初心者でもわかる基本と活用方法
No.6
Java&Spring記事人気No6
Python
Pythonでエラーメッセージを取得する方法を完全解説!初心者でもわかるExceptionオブジェクト
No.7
Java&Spring記事人気No7
PHP
PHP の MySQL 接続の基本(mysqli, PDO)を完全解説!初心者向けガイド
No.8
Java&Spring記事人気No8
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方