【Python】第5章第9回:静的メソッドとクラスメソッド
本記事では、Pythonの「静的メソッド」と「クラスメソッド」について詳しく解説します。これらを適切に活用することで、柔軟なクラス設計が可能になります。
0. 記事の概要
この記事を読むメリット
- 静的メソッドとクラスメソッドの違いを理解:適切な場面で使い分けができるようになります。
- コード設計力の向上:汎用的で効率的なクラス設計を習得できます。
- 実践力の習得:具体的な例を通じて、即戦力となるスキルを得られます。
この記事で学べること
- 静的メソッドとクラスメソッドの定義と使い方
- 両者の違いと使い分けのポイント
- 実践的な活用例と応用方法
1. 静的メソッドとは?
1.1 定義
静的メソッドは、クラスやインスタンスに依存しない処理を定義するメソッドです。通常、ユーティリティ関数や汎用的な操作を行う場合に使用されます。
1.2 静的メソッドの特徴
- インスタンスやクラスに依存しない
@staticmethod
デコレータを使用して定義- クラス名から直接呼び出し可能
1.3 静的メソッドの実例
# 静的メソッドの例
class Math:
@staticmethod
def add(a, b):
return a + b
# 呼び出し例
print(Math.add(5, 3)) # 出力: 8
動作解説
add
メソッドは、2つの引数を受け取り、その和を返します。- クラス名を通じて直接呼び出せます。
2. クラスメソッドとは?
2.1 定義
クラスメソッドは、クラス自体に関連付けられたメソッドであり、クラス変数やクラスの状態を操作するために使用されます。
2.2 クラスメソッドの特徴
- クラス全体に関連する処理を記述
@classmethod
デコレータを使用して定義- クラス名またはインスタンスから呼び出し可能
2.3 クラスメソッドの実例
# クラスメソッドの例
class Counter:
count = 0
@classmethod
def increment(cls):
cls.count += 1
return cls.count
# 呼び出し例
print(Counter.increment()) # 出力: 1
print(Counter.increment()) # 出力: 2
動作解説
increment
メソッドはクラス変数count
を操作します。- クラス名を介して呼び出すことで、クラス全体の状態を管理できます。
3. 静的メソッドとクラスメソッドの違い
3.1 主な違い
静的メソッド | クラスメソッド |
---|---|
クラスやインスタンスに依存しない | クラス自体に関連 |
@staticmethod デコレータを使用 | @classmethod デコレータを使用 |
ユーティリティ関数に適している | クラス全体の状態を操作する場合に適している |
4. 練習問題
以下の課題に挑戦してみましょう。
- 「Utility」というクラスを作成し、2つの数値の積を計算する静的メソッドを実装してください。
- 「Account」というクラスを作成し、クラス変数で銀行の名前を保持し、クラスメソッドで銀行名を取得できるようにしてください。
5. 練習問題の解答と解説
問1の解答例
# Utilityクラス
class Utility:
@staticmethod
def multiply(a, b):
return a * b
print(Utility.multiply(4, 5)) # 出力: 20
問2の解答例
# Accountクラス
class Account:
bank_name = "Sample Bank"
@classmethod
def get_bank_name(cls):
return cls.bank_name
print(Account.get_bank_name()) # 出力: Sample Bank
6. まとめ
静的メソッドとクラスメソッドは、それぞれ異なる用途で非常に便利です。適切に使い分けることで、コードの可読性と効率性を向上させることができます。