【Python】レッスン5-07:静的メソッドを理解しよう

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:静的メソッド

この記事の練習問題で使用する知識:
1.基礎文法、2.制御構造、3.関数とスコープ、4.データ構造、5.オブジェクト指向

<<前のページ Python記事一覧
次のページ>>

Pythonの「静的メソッド」とは

この章ではPythonにおける「静的メソッド」の意味や使い方を学習します。必要ない方はここをクリックして練習問題へ飛びましょう。




静的メソッドはPythonのクラス内で定義されるメソッドの一種ですが、通常のインスタンスメソッドとは異なり、インスタンスやクラス自体に依存しません。

つまりクラスやそのインスタンスがなくても呼び出すことができます。

これは@staticmethodというデコレータを使って定義され、主にクラスの外部からアクセスできる汎用的な処理を提供するために使われます。

【初心者向け】Pythonのオブジェクト指向を分かりやすくまとめた概念図。 特にクラスの継承、オーバーライド、抽象クラス、ミックスインクラス、データクラス、静的メソッドの関係性を視覚的に理解できるようまとめている。

静的メソッドの定義と使用

静的メソッドはクラスの一部として定義されますが、通常のメソッドと違ってselfclsといった引数を取ることはありません。

これは、そのメソッドがクラスの状態に依存せず、固定的な処理を行うためです。

以下は静的メソッドの定義方法の例です。

class Calculator:
    @staticmethod
    def add(x, y):
        return x + y

# 静的メソッドの呼び出し
result = Calculator.add(5, 3)
print(result)  # 出力:8

この例ではaddメソッドが静的メソッドとして定義されており、Calculatorクラスから直接呼び出しています。

通常のインスタンスメソッドのように、インスタンスを作成する必要がなく、シンプルに呼び出すことができます。

静的メソッドの使用例

静的メソッドはクラスの状態に依存しないため、どのインスタンスでも共通に使用されるユーティリティ関数を提供するのに適しています。

たとえば数値の処理や文字列のフォーマット、日付の操作など、クラス全体に関連する処理をカプセル化するために使われます。

class MathUtility:
    @staticmethod
    def multiply(x, y):
        return x * y

    @staticmethod
    def square(number):
        return number ** 2

# 使用例
result1 = MathUtility.multiply(10, 5)
result2 = MathUtility.square(7)

print(result1)  # 出力:50
print(result2)  # 出力:49

この例ではmultiplyメソッドとsquareメソッドがそれぞれ数値の掛け算と平方計算を行うための静的メソッドとして定義されています。

どちらもクラスに属するものの、インスタンスとは無関係に利用できる点が特徴です。

まとめ

静的メソッドはクラスのインスタンスに依存しない、汎用的な処理を提供するために便利です。

特定のクラスに関連する処理でありながら、クラスの状態に依存しない場合、静的メソッドを使うことでコードの可読性と管理性を向上させることができます。

練習問題5-6:静的メソッドを使って簡単な計算プログラムを作成しよう

クラス内に定義された静的メソッドを使って、足し算と引き算を行うプログラムを作成しましょう。

このプログラムでは、2つの整数を入力として受け取り、それらの数値の足し算と引き算を静的メソッドを使って計算します。

結果を画面に表示するプログラムを作成してください。

問題の詳細条件

以下の要件に従ってコードを完成させてください。

  • Calculatorクラスを定義し、その中に2つの静的メソッドaddsubtractを定義すること。
  • 静的メソッドaddは、2つの整数を受け取り、その和を返すこと。
  • 静的メソッドsubtractは、2つの整数を受け取り、その差を返すこと。
  • クラスのインスタンスを作成せずに、クラス名を使って静的メソッドを呼び出すこと。
  • 結果を日本語で画面に出力すること。

ただし、以下のような実行結果となるコードを書くこと。

*****↓↓正解コードの実行結果の例↓↓*****

足し算の結果: 15
引き算の結果: 5

【ヒント】難しいと感じる人だけ見よう

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:クラスCalculatorの定義
□ 静的メソッドaddの定義
□ □ 引数abを取り、戻り値としてa + bを返す
□ 静的メソッドsubtractの定義
□ □ 引数abを取り、戻り値としてa - bを返す
2:変数result_addに、クラスCalculatorの静的メソッドaddを呼び出して計算した結果を代入
3:変数result_subtractに、クラスCalculatorの静的メソッドsubtractを呼び出して計算した結果を代入
4:f文字列を使用して「足し算の結果」を表示
5:f文字列を使用して「引き算の結果」を表示

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

class Calculator:
    # 静的メソッドとして定義される関数
    """【穴埋め問題1】ここにaddメソッドを定義し、2つの引数を足し合わせて返すコードを書いてください。"""
    
    """【穴埋め問題2】ここにsubtractメソッドを定義し、2つの引数を引き算して返すコードを書いてください。"""

# 静的メソッドの使用例
"""【穴埋め問題3】ここにCalculatorクラスのaddメソッドを使用して、10と5を足し合わせた結果を変数result_addに格納するコードを書いてください。"""

"""【穴埋め問題4】ここにCalculatorクラスのsubtractメソッドを使用して、10と5を引き算した結果を変数result_subtractに格納するコードを書いてください。"""

# 結果を出力します
print(f"足し算の結果: {result_add}")  # 足し算の結果: 15
print(f"引き算の結果: {result_subtract}")  # 引き算の結果: 5

以上がこの問題の穴埋めコードです。

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。



問題の答え合わせと解説

この問題の一つの正解例とそのコードの解説を以下に示します。

一つの正解例

例えば以下のようなプログラムが考えられます。

class Calculator:
    # 静的メソッドとして定義される関数
    @staticmethod
    def add(a, b):
        return a + b

    @staticmethod
    def subtract(a, b):
        return a - b

# 静的メソッドの使用例
result_add = Calculator.add(10, 5)
result_subtract = Calculator.subtract(10, 5)

# 結果を出力します
print(f"足し算の結果: {result_add}")  # 足し算の結果: 15
print(f"引き算の結果: {result_subtract}")  # 引き算の結果: 5

正解例の詳細解説

このコードはPythonのクラスで「静的メソッド」を使用する方法を紹介しています。

クラス内にaddsubtractという二つのメソッドがあり、それぞれ2つの数値を足し算・引き算するために使われます。

クラスの定義

class Calculator:

Calculatorという名前のクラスを定義しています。

このクラスには数値の計算を行うためのメソッドが含まれています。

足し算メソッドの定義

@staticmethod
def add(a, b):
    return a + b

この部分ではaddという名前の静的メソッドを定義しています。

このメソッドは引数として2つの数値(ab)を受け取り、その和を返します。

静的メソッドのためクラス名を使って直接呼び出すことができます。

引き算メソッドの定義

@staticmethod
def subtract(a, b):
    return a - b

次にsubtractという静的メソッドを定義しています。

このメソッドも同様に2つの数値を引数として受け取り、その差を返します。

静的メソッドの使用例

result_add = Calculator.add(10, 5)
result_subtract = Calculator.subtract(10, 5)

ここではCalculatorクラスの静的メソッドaddsubtractを使って実際に計算を行っています。

result_addには10 + 5の結果である15がresult_subtractには10 - 5の結果である5がそれぞれ格納されます。

ここでのポイントは、クラスのインスタンスを作成せずに、直接Calculator.addCalculator.subtractという形でメソッドを呼び出している点です。

結果を出力

print(f"足し算の結果: {result_add}")  # 足し算の結果: 15
print(f"引き算の結果: {result_subtract}")  # 引き算の結果: 5

最後に計算結果をprint関数を使って表示します。

f-stringを用いることで、文字列中に計算結果を埋め込んで出力しています。

まとめ

このコードではPythonでの「静的メソッド」の使い方を学びました。

静的メソッドはインスタンスを作らなくてもクラス名から直接メソッドを呼び出せる便利な機能です。

静的メソッドを理解することで、クラスの使い方をより柔軟に活用できるようになります。

これからも、Pythonのクラスやメソッドを使って、さらに複雑なプログラムに挑戦してみましょう!

<<前のページ Python記事一覧
次のページ>>

質問用コンタクトフォーム

この記事はAIを用いて書いた記事です。

人間の目による確認も行っていますが、もし間違い等ありましたらご指摘頂けると大変助かります。






    Python記事一覧へ戻る
    トップページへ戻る