カテゴリ: Python 更新日: 2026/02/27

Pythonのデコレータ(@staticmethod / @classmethod)の使い方を完全ガイド!初心者でもわかるクラスメソッド入門

Pythonのデコレータ(@staticmethod / @classmethod)の使い方
Pythonのデコレータ(@staticmethod / @classmethod)の使い方

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

生徒

「Python(パイソン)のクラスの中に書く@staticmethod@classmethodって、何をしているんですか?」

先生

「それは、クラスの中にある関数の“役割”をはっきりさせるための目印です。使い分けると、プログラムがとても読みやすくなります。」

生徒

「普通のメソッドと何が違うんですか?」

先生

「では、Python(パイソン)のオブジェクト指向(シコウ)の基本から、順番に見ていきましょう。」

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

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

Python(パイソン)のデコレータとは、「関数やメソッドの動きを少し変えるための仕組み」です。見た目は@から始まる特別な記号で、関数やメソッドの直前に書きます。

初心者の方は、「これはこの関数の役割を説明するラベル」くらいに考えると分かりやすいです。難しい仕組みを理解しなくても、使い方を覚えれば問題ありません。

2. クラスとメソッドの基本をおさらい

2. クラスとメソッドの基本をおさらい
2. クラスとメソッドの基本をおさらい

クラスとは、現実世界の「もの」をプログラムで表現した設計図です。例えば「人」や「商品」などをクラスとして表します。

メソッドとは、そのクラスが持つ「動作」です。Pythonでは、通常のメソッドはselfという特別な引数を使って、自分自身の情報にアクセスします。


class Person:
    def say_hello(self):
        print("こんにちは")

このselfは、「この人自身」という意味を持つ重要なキーワードです。

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

このように、selfを使わず、クラス名から直接呼び出せるのが特徴です。

4. @staticmethodを使う場面

4. @staticmethodを使う場面
4. @staticmethodを使う場面

@staticmethodは、「クラスと関係はあるが、個々のデータを使わない処理」に向いています。例えば、入力チェックや単純な計算処理などです。


class UserCheck:
    @staticmethod
    def is_adult(age):
        return age >= 20

print(UserCheck.is_adult(18))
print(UserCheck.is_adult(25))

False
True

このように、状態を持たず、判断だけを行う処理にぴったりです。

5. @classmethodとは?

5. @classmethodとは?
5. @classmethodとは?

@classmethod(クラスメソッド)は、「クラスそのものの情報を使うメソッド」です。引数にはclsが渡され、これはクラス自身を表します。

例えるなら、「クラス全体のルールを管理する責任者」のような存在です。


class School:
    school_name = "ひまわり学園"

    @classmethod
    def show_school_name(cls):
        print(cls.school_name)

6. @classmethodの具体例

6. @classmethodの具体例
6. @classmethodの具体例

@classmethodは、クラス変数(クラス全体で共有する値)を扱うときによく使われます。


class Counter:
    count = 0

    @classmethod
    def increment(cls):
        cls.count += 1

Counter.increment()
Counter.increment()
print(Counter.count)

2

このように、クラス全体の状態を管理できるのが特徴です。

7. 通常メソッド・@staticmethod・@classmethodの違い

7. 通常メソッド・@staticmethod・@classmethodの違い
7. 通常メソッド・@staticmethod・@classmethodの違い

三つのメソッドの違いを簡単にまとめると、次のようになります。

  • 通常メソッド:自分自身(self)を使う
  • @staticmethod:クラスの補助機能
  • @classmethod:クラス全体の情報を扱う

この使い分けを意識することで、Pythonのオブジェクト指向がぐっと分かりやすくなります。

8. 初心者がつまずきやすいポイント

8. 初心者がつまずきやすいポイント
8. 初心者がつまずきやすいポイント

初心者の方は、「全部普通のメソッドでいいのでは?」と感じがちです。しかし、役割ごとに分けることで、後から見返したときに意味がすぐ分かるコードになります。

特にチーム開発や長いプログラムでは、この違いが大きな助けになります。

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

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

関連記事:
カテゴリの一覧へ
新着記事
New1
Python
Pythonのクロージャー(Closure)とは?関数内関数とnonlocalの活用
New2
Python
Pythonのエラーメッセージの読み方!よくあるエラーと解決方法
New3
Python
Pythonの仮想環境とは?venvを使った環境構築の手順を初心者向けに解説
New4
Python
Pythonのダックタイピングを完全ガイド!初心者でもわかる動的なオブジェクト指向設計
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonでエラーメッセージを取得する方法を完全解説!初心者でもわかるExceptionオブジェクト
No.2
Java&Spring記事人気No2
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.3
Java&Spring記事人気No3
PHP
PHPの配列をソートする方法!sort, rsort, asort, ksortの使い方を丁寧に解説します!
No.4
Java&Spring記事人気No4
PHP
PHP の MySQL にデータを挿入する方法(INSERT 文の実行)を完全解説!初心者向けガイド
No.5
Java&Spring記事人気No5
PHP
PHP の MySQL 接続の基本(mysqli, PDO)を完全解説!初心者向けガイド
No.6
Java&Spring記事人気No6
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
No.7
Java&Spring記事人気No7
PHP
PHPの可変長引数(...$args)の使い方を完全ガイド!初心者でもわかる基本と活用方法
No.8
Java&Spring記事人気No8
Python
PythonでSQLiteを使う方法を完全ガイド!初心者でもわかるデータベース基本操作