Python classmethod() 関数

Python3 内置函数Python3 組み込み関数


classmethod()Python においてメソッドをクラスメソッドに変換するための組み込み関数です。

クラスメソッドは、インスタンスではなくクラスに属するメソッドであり、最初のパラメータはクラス自体です(通常 cls と命名されます)。クラスメソッドはクラスの属性にアクセスできますが、インスタンスの属性にはアクセスできません。

用語解説: classmethod 是 class method(类方法)的缩写。


基本構文とパラメータ

構文形式

classmethod(function)

パラメータの説明

  • パラメータ function:
    • 型: 関数オブジェクト
    • 説明: クラスメソッドに変換する関数。

関数の説明

  • 戻り値: クラスメソッドオブジェクトを返します。
  • 特徴: 最初のパラメータはクラス自体(cls)であり、インスタンス(self)ではありません。

例

例1:基本的な使い方

例

class MyClass:
    class_attr = 0

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

    @classmethod
    def get_count(cls):
        return cls.class_attr

# クラスを通じて呼び出します(インスタンスを作成する必要はありません)
print(MyClass.increment())  # 出力: 1
print(MyClass.increment())  # 出力: 2
print(MyClass.get_count())   # 出力: 2

# インスタンス経由でも呼び出せます(ただし一般的ではありません)
obj = MyClass()
print(obj.increment())  # 出力: 3

実行結果の予想:

1
2
2
3

コードの解説:

  1. クラスメソッドは @classmethod デコレータで定義されます。
  2. 最初のパラメータは cls で、クラス自体を表します。

例2:ファクトリメソッド

例

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @classmethod
    def from_dict(cls, data):
        """辞書からオブジェクトを作成"""
        return cls(data['name'], data['age'])

    @classmethod
    def from_string(cls, s):
        """文字列からオブジェクトを作成(形式:name-age)"""
        name, age = s.split('-')
        return cls(name, int(age))

    def __str__(self):
        return f"{self.name}, {self.age}岁"

# クラスメソッドを使用したファクトリパターン
p1 = Person.from_dict({'name': 'Tom', 'age': 20})
p2 = Person.from_string("Jerry-25")

print(p1)  # 出力: Tom, 20岁
print(p2)  # 出力: Jerry, 25岁

実行結果の予想:

Tom, 20岁
Jerry, 25岁

クラスメソッドは、異なるデータソースからオブジェクトを作成するファクトリメソッドを実装するためによく使用されます。


Python3 内置函数Python3 組み込み関数


その他の拡張