Python

【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
動作解説
  1. addメソッドは、2つの引数を受け取り、その和を返します。
  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
動作解説
  1. incrementメソッドはクラス変数countを操作します。
  2. クラス名を介して呼び出すことで、クラス全体の状態を管理できます。

3. 静的メソッドとクラスメソッドの違い

3.1 主な違い

静的メソッドクラスメソッド
クラスやインスタンスに依存しないクラス自体に関連
@staticmethodデコレータを使用@classmethodデコレータを使用
ユーティリティ関数に適しているクラス全体の状態を操作する場合に適している

4. 練習問題

以下の課題に挑戦してみましょう。

  1. 「Utility」というクラスを作成し、2つの数値の積を計算する静的メソッドを実装してください。
  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. まとめ

静的メソッドとクラスメソッドは、それぞれ異なる用途で非常に便利です。適切に使い分けることで、コードの可読性と効率性を向上させることができます。