Python staticmethod() 関数

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


staticmethod()Pythonにおいてメソッドを静的メソッドに変換するために使用される組み込み関数です。

静的メソッドはインスタンスではなくクラスに属するメソッドであり、インスタンス属性にアクセスしたりインスタンスメソッドを呼び出したりする必要はありません。staticmethod()デコレータとして使用することも、直接呼び出すこともできます。

単語の意味: staticmethodであるstatic method(静的メソッド)の略です。


基本構文とパラメータ

構文形式

staticmethod(function)

パラメータの説明

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

関数の説明

  • 戻り値:静的メソッドオブジェクトを返します。
  • 特徴:静的メソッドはselfパラメータを必要とせず、クラス名から直接呼び出すことができます。

例

例1:基本的な使い方

例

class MathUtils:
    # デコレータを使用して静的メソッドを定義(推奨)
    @staticmethod
    def add(a, b):
        return a + b

    @staticmethod
    def multiply(a, b):
        return a * b

# クラス名から直接呼び出す(インスタンスを作成する必要がない)
result = MathUtils.add(3, 5)
print(result)  # 出力: 8

result = MathUtils.multiply(4, 6)
print(result)  # 出力: 24

実行結果の想定:

8
24

コードの解説:

  1. 静的メソッドは@staticmethodデコレータで定義します。
  2. 通常の関数のように呼び出すことができますが、クラスの名前空間に属します。
  3. クラスのインスタンスを作成しなくても呼び出すことができます。

例2:デコレータを使用しない

例

class Temperature:
    @staticmethod
    def celsius_to_fahrenheit(c):
        return c * 9/5 + 32

    @staticmethod
    def fahrenheit_to_celsius(f):
        return (f - 32) * 5/9

# 静的メソッドを呼び出す
print(Temperature.celsius_to_fahrenheit(0))    # 出力: 32.0
print(Temperature.celsius_to_fahrenheit(100)) # 出力: 212.0
print(Temperature.fahrenheit_to_celsius(32)) # 出力: 0.0

# インスタンスからも呼び出すことができます
temp = Temperature()
print(temp.celsius_to_fahrenheit(25))  # 出力: 77.0

実行結果の想定:

32.0
212.0
0.0
77.0

コードの解説:

  • 静的メソッドはユーティリティクラスでよく使用され、インスタンスに関係のない関数をカプセル化します。
  • 静的メソッドはクラス名またはインスタンス名から呼び出すことができます。

例3:ファクトリパターンでの応用

例

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

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

    @staticmethod
    def create_adult(name):
        # 成人を作成
        return Person(name, 18)

# 静的メソッドを使用してオブジェクトを作成
p1 = Person.from_dict({'name': 'Tom', 'age': 20})
print(p1.name, p1.age)  # 出力: Tom 20

p2 = Person.create_adult('Jack')
print(p2.name, p2.age)  # 出力: Jack 18

実行結果の想定:

Tom 20
Jack 18

静的メソッドはファクトリメソッドとしてよく使用され、異なるデータソースからオブジェクトインスタンスを作成します。


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


その他の拡張