【Python入門】静的メソッドで手軽にクラスの機能を使おう【レッスン5-7】

ながみえ

一つ前のLessonではメソッドのオーバーライドについて学習しました。

今回は静的メソッドについて見ていきましょう。

Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:関数とスコープ編

Lesson4:データ構造編
Lesson5:オブジェクト指向編
・Lesson5-1:クラスの基本を理解しよう
・Lesson5-2:メソッドの基本を理解しよう
・Lesson5-3:カプセル化を理解しよう
・Lesson5-4:プロパティを理解しよう
・Lesson5-5:クラスの継承を理解しよう
・Lesson5-6:メソッドのオーバーライドを理解しよう
・Lesson5-7:静的メソッドを理解しよう ◁今回はココ
・Lesson5-8:モジュールを使いこなそう
・Lesson5-9:抽象クラスを理解しよう
・Lesson5-10:ミックスインを理解しよう
・Lesson5-11:データクラスを理解しよう
・練習問題5-1:モンスター捕獲ゲームを作ろう
・練習問題5-2:モンスターとのバトルゲームを作ろう
次のステップ:Pythonを用いたアプリ開発

<<前のページ

【Python学習記事のアイキャッチ画像】Lesson5-6 メソッドのオーバーライドを理解しよう

Pythonの記事一覧

Python学習カテゴリの親ページ用アイキャッチ画像(テキスト&問題集)、記事一覧へのリンク案内

次のページ>>

【Python学習記事のアイキャッチ画像】Lesson5-8 モジュールを使いこなそう

静的メソッドとは?クラスを通じて直接使える関数の定義方法

この章では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メソッドがそれぞれ数値の掛け算と平方計算を行うための静的メソッドとして定義されています。

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

まとめ

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

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

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

【Python】勉強猫がノートパソコンに向かい、練習問題に挑戦する様子。記事内の休憩用イラスト

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

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

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

問題の詳細条件

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

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

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

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

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

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

Q
ヒント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文字列を使用して「引き算の結果」を表示

Q
ヒント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

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

問題の答え合わせと解説

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

一つの正解例

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

Q
正解コード
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つの数値を足し算・引き算するために使われます。

Q
詳細解説

クラスの定義

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学習記事のアイキャッチ画像】Lesson5-6 メソッドのオーバーライドを理解しよう

Pythonの記事一覧

Python学習カテゴリの親ページ用アイキャッチ画像(テキスト&問題集)、記事一覧へのリンク案内

次のページ>>

【Python学習記事のアイキャッチ画像】Lesson5-8 モジュールを使いこなそう

FAQ|Pythonの静的メソッドの使い方

Q
Q1. 静的メソッドと通常メソッドの違いは?

静的メソッドはインスタンスを生成せずにクラスから直接呼び出せるメソッドで、通常のメソッドはインスタンスが必要です。

Q
Q2. どんな時に静的メソッドを使うべきですか?

インスタンスの状態に依存しない処理(例:単純な計算やユーティリティ関数)に使うのが効果的です。

Q
Q3. 静的メソッドは継承されますか?

はい、子クラスに継承されます。ただし、必要に応じて子クラス側で上書きも可能です。

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

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

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

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

記事URLをコピーしました