カテゴリ: Python 更新日: 2026/01/23

Pythonのデコレータ(@staticmethod / @classmethod)の使い方を徹底解説!初心者でもわかるOOP入門

Pythonのデコレータ(@staticmethod / @classmethod)の使い方を徹底解説
Pythonのデコレータ(@staticmethod / @classmethod)の使い方を徹底解説

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

生徒

「Pythonのクラスの中で、@staticmethodとか@classmethodって書いてあるのを見たんですが、正直よくわかりません…」

先生

「それはPythonのデコレータと呼ばれる仕組みで、クラスの中の関数の役割をわかりやすくするためのものです。」

生徒

「クラスの中の関数って、全部同じじゃないんですか?」

先生

「実は、役割によって使い分けると、プログラムがとても読みやすく、安全になります。順番に見ていきましょう。」

1. Pythonのデコレータとは?

1. Pythonのデコレータとは?
1. Pythonのデコレータとは?

Pythonのデコレータとは、「関数やメソッドの動きを、あとから分かりやすく指定するための目印」のようなものです。 見た目は@から始まり、関数やメソッドのすぐ上に書きます。

プログラミング未経験の方は、「ラベル」や「付せん」をイメージすると理解しやすいです。 箱(関数)に「これは特別な使い方ですよ」と書いたシールを貼る感覚です。

Pythonのオブジェクト指向プログラミング(OOP)では、特に @staticmethod@classmethod という2つのデコレータがよく使われます。

2. クラスとメソッドの超基本

2. クラスとメソッドの超基本
2. クラスとメソッドの超基本

クラスとは、現実世界の「設計図」のようなものです。 たとえば「人」というクラスを作ると、名前や年齢といった情報や、話す・歩くといった動作をまとめられます。

クラスの中に書く関数のことをメソッドと呼びます。 普通のメソッドは、作られた実体(これをインスタンスと言います)と強く結びついています。

しかし、すべての処理が「個人専用」である必要はありません。 そこで登場するのが、@staticmethod@classmethodです。

3. @staticmethodとは?

3. @staticmethodとは?
3. @staticmethodとは?

@staticmethodは、「このメソッドは、クラスに関係しているけれど、個別の情報は使いません」 という意味を持つデコレータです。

例えるなら、「会社の中で使う計算機」のような存在です。 誰のものでもなく、名前や部署に関係なく使える道具です。


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

result = Calculator.add(3, 5)
print(result)

8

この例では、addメソッドはクラスの中にありますが、 特定のデータを持つ必要がありません。 そのためselfも使っていません。

@staticmethodを使うことで、「この処理は補助的な機能です」と プログラムを読む人に伝えられます。

4. @classmethodとは?

4. @classmethodとは?
4. @classmethodとは?

@classmethodは、「クラスそのものに関係する処理」を書くためのデコレータです。 メソッドの最初の引数には、selfではなくclsが渡されます。

clsとは、「このクラス自体」を表す特別な名前です。 設計図そのものを見ながら処理をするイメージです。


class User:
    user_count = 0

    @classmethod
    def create_user(cls):
        cls.user_count += 1
        return cls.user_count

print(User.create_user())
print(User.create_user())

1
2

この例では、Userクラス全体で共有される user_countという数値を操作しています。

@classmethodを使うことで、 「クラス全体の状態を管理する処理」であることが明確になります。

5. 通常のメソッドとの違い

5. 通常のメソッドとの違い
5. 通常のメソッドとの違い

Pythonのクラスには、主に次の3種類のメソッドがあります。

  • 通常のメソッド:個別のデータを扱う
  • @staticmethod:独立した便利機能
  • @classmethod:クラス全体を操作する処理

これを日常生活に例えると、 通常のメソッドは「個人のスマートフォン」、 staticmethodは「共有のコピー機」、 classmethodは「会社のルール変更」のようなものです。

6. なぜ使い分けるのか?

6. なぜ使い分けるのか?
6. なぜ使い分けるのか?

デコレータを使い分ける最大の理由は、 プログラムが読みやすくなり、間違いを防げることです。

何でも通常のメソッドにしてしまうと、 「これは個人用なのか、全体用なのか」が分かりにくくなります。

@staticmethod@classmethodを正しく使うことで、 Pythonのオブジェクト指向プログラミングらしい、 きれいで安全なコードを書くことができます。

カテゴリの一覧へ
新着記事
New1
Django
Djangoモデル入門|初心者が最初に知るべきORMの基本操作
New2
Python
Pythonの特殊メソッド(__str__ / __repr__ / __eq__)を便利に使う方法をやさしく解説
New3
Python
Pythonのリストとは?基本の使い方と作成・操作のやり方をやさしく解説
New4
Flask
Flaskのログをファイルに保存する方法!初心者でもわかる設定手順を徹底解説
人気記事
No.1
Java&Spring記事人気No1
Django
Djangoプロジェクトのディレクトリ構造を完全解説!初心者でも迷わないフォルダの見方
No.2
Java&Spring記事人気No2
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
No.3
Java&Spring記事人気No3
Flask
FlaskアプリのSECRET_KEYの設定方法を完全ガイド!初心者でもわかるセキュリティ対策
No.4
Java&Spring記事人気No4
Python
Pythonで文字列を置換するには?replace()の使い方と正規表現の活用例
No.5
Java&Spring記事人気No5
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.6
Java&Spring記事人気No6
Python
Pythonの文字列から一部を抽出する方法!スライスを使った基本的な切り出し方
No.7
Java&Spring記事人気No7
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.8
Java&Spring記事人気No8
Python
Pythonでディレクトリ操作を完全解説!作成・削除・一覧取得の基本