Python staticmethod() 関数
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
# デコレータを使用して静的メソッドを定義(推奨)
@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
コードの解説:
- 静的メソッドは
@staticmethodデコレータで定義します。 - 通常の関数のように呼び出すことができますが、クラスの名前空間に属します。
- クラスのインスタンスを作成しなくても呼び出すことができます。
例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
@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
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 組み込み関数