@classmethod
の概要
@classmethod
は、メソッドがクラス自身を最初の引数(通常cls
)として受け取る場合に使います。これはインスタンスではなく、クラスに対して操作を行いたい場合に役立ちます。
class MyClass:
@classmethod
def from_string(cls, string_data):
# クラスメソッドとしての例
return cls(*string_data.split('-'))
クラスメソッドは、特にファクトリーメソッド(クラスの別のコンストラクタ)として利用されることが多いです。
@staticmethod
の概要
一方、@staticmethod
は、クラスやインスタンスに依存しない汎用的な関数をクラス内で定義するために使います。これにより、クラスと論理的に関連のある関数をクラス内にまとめることができます。
class MyClass:
@staticmethod
def is_valid_data(data):
# クラスやインスタンスに依存しないメソッド
return isinstance(data, str)
スタティックメソッドは、インスタンスの状態やクラスの状態に関わらない関数的な処理を行う場合に便利です。
クラスメソッドとスタティックメソッドの違い
@classmethod
はクラス自体を操作するメソッドで、例えばクラスの別のコンストラクタやサブクラスでも動作させたい処理に使います。
@staticmethod
はクラスやインスタンスの属性に触れない汎用的な処理を行うため、引数にクラスやインスタンスを取りません。
これにより、クラス内部で整理された関連関数を持ちたい場合に使用することが推奨されます。