カテゴリ: 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の入力と出力を学ぼう!print()関数とinput()関数の使い方
New3
PHP
PHPの配列をソートする方法!sort, rsort, asort, ksortの使い方を丁寧に解説します!
New4
PHP
PHPの関数型プログラミングの基礎をやさしく解説!初心者でもわかる書き方と考え方
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonの書き方を基本から解説!はじめてのPythonプログラム
No.2
Java&Spring記事人気No2
Python
Pythonのダックタイピングとは?型チェックなしで動的に振る舞うOOP設計をやさしく解説
No.3
Java&Spring記事人気No3
Python
Pythonで経過時間を計測する方法を完全解説!初心者でもわかる time.perf_counter() と time.sleep()
No.4
Java&Spring記事人気No4
PHP
PHP の可変変数と変数の参照渡しを完全解説!初心者でも理解できる動的変数の使い方
No.5
Java&Spring記事人気No5
Python
Pythonのセット(set)とは?リストや辞書との違いを解説
No.6
Java&Spring記事人気No6
PHP
PHPのJWT認証を完全ガイド!初心者でもわかるJSON Web Tokenの基本と安全な仕組み
No.7
Java&Spring記事人気No7
Python
Pythonで一時ファイルを作成・管理する方法!初心者でもわかるtempfileモジュール入門
No.8
Java&Spring記事人気No8
Python
Pythonでリストの全要素に処理を適用する方法(map() / lambda)