0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonデコレータの違い:staticmethodとclassmethod

Posted at

はじめに

Pythonのデコレータは、関数やメソッドの振る舞いを修飾したり拡張したりするために使用されます。
staticmethodとclassmethodデコレータの違いについてまとめます。

クラスメソッド(classmethod)

・クラスそのものに対して操作を行うメソッド。
・第一引数としてクラスオブジェクト(通常はcls)を受け取る。
・クラスの状態(クラス変数)にアクセス・操作が可能。

class MyClass:
    @classmethod
    def my_class_method(cls, arg1, arg2):
        # クラスメソッドの実装

静的メソッド(staticmethod)

・クラスやインスタンスに依存しないメソッド。
・クラスオブジェクトやインスタンスオブジェクトを受け取らない。
・クラスやインスタンスの状態にアクセス・変更ができない。

class MyClass:
    @staticmethod
    def my_static_method(arg1, arg2):
        # 静的メソッドの実装

違いのまとめ

引数
classmethodは、第一引数としてクラスオブジェクトを受け取ります。
staticmethodは、クラスオブジェクトやインスタンスオブジェクトを受け取りません。

使用目的
classmethodは、クラスの状態(クラス変数)にアクセス・操作するために使用されます。
staticmethodは、クラスやインスタンスの状態に依存しない操作を行うために使用されます。

class ExampleClass:
    class_var = 0

    @classmethod
    def class_method(cls):
        return cls.class_var

    @staticmethod
    def static_method(a, b):
        return a + b

# クラスメソッドの呼び出し
result1 = ExampleClass.class_method()
print(result1)  # 0を出力

# 静的メソッドの呼び出し
result2 = ExampleClass.static_method(1, 2)
print(result2)  # 3を出力
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?