はじめに
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を出力