👋

【Python】@staticmethodについて

2025/03/13に公開

Pythonの@staticmethodについて説明します

そもそもクラスとは何か

まず、「クラス」というのは、プログラムの中で関連する情報とその操作方法をまとめたものです。

例えば「犬」というクラスを作ると、犬の名前、年齢、そして「吠える」などの動作をひとまとめにできます。

通常のメソッドとは

クラスの中の関数を「メソッド」と呼びます。

通常のメソッドは、そのクラスから作られた「オブジェクト」(実体)に関する操作をします。

例えば:

class Dog:
    def __init__(self, name):
        self.name = name
        
    def bark(self):  # selfはその犬自身を指します
        print(f"{self.name}:ワンワン!")

pochi = Dog("ポチ")
pochi.bark()  # 「ポチ:ワンワン!」と表示されます

@staticmethodとは何か

「@staticmethod」は、クラスに関係はあるけれど、特定のオブジェクト(インスタンス)には関係ない関数を作るときに使います。

簡単に言うと:

  • 通常のメソッド:「この特定の犬について何かする」関数
  • staticメソッド:「犬全般について何かする」関数

具体例

class Dog:
    def __init__(self, name):
        self.name = name
        
    def bark(self):  # 普通のメソッド:特定の犬が吠える
        print(f"{self.name}:ワンワン!")
    
    @staticmethod
    def show_dog_types():  # staticメソッド:特定の犬に関係ない
        print("犬には、柴犬、秋田犬、ラブラドールなど多くの種類がいます。")

# 使い方の違い
pochi = Dog("ポチ")
pochi.bark()  # オブジェクトから呼び出す(普通のメソッド)

Dog.show_dog_types()  # クラスから直接呼び出せる(staticメソッド)
# pochi.show_dog_types() でも呼び出せますが、ポチとは特に関係ありません

なぜ@staticmethodを使うのか

  1. 関連する機能をクラスの中にまとめておける
  2. オブジェクト(インスタンス)を作らなくても使える関数を提供できる
  3. コードの整理がしやすくなる

まとめ

  • 通常のメソッド:selfを使って、そのオブジェクト自身の情報を扱える
  • @staticmethod:selfは使わず、オブジェクトの情報にアクセスしない

もし犬の鳴き声を翻訳する関数を作るなら:

  • 普通のメソッド:「このポチという犬の鳴き声を翻訳する」
  • staticメソッド:「犬の鳴き声を一般的に翻訳する」(特定の犬は関係ない)

Discussion