さるへい備忘録

さるへいのやったことを綴っているブログです。基本的にテクノロジーの話題です。

@staticmethodについて

pythonのstaticmethodがいまいちよくわからなかったので調べて少しまとめてみた。

公式のドキュメントはこちら→公式ドキュメント

公式ドキュメントを見ると以下のように使うと書かれている。

class C:
    @staticmethod
    def f(arg1, arg2, ...): ...

デコレーターとして使うみたいだけど、どうやら関数を定義する時に通常pythonではselfを第一引数とするが、これがいらないらしい。 まぁつまるところインスタンスとやりとりしない関数らしい。 以下のようなコードが書けないらしい。

# -*- coding: utf-8 -*-
"""
@staticmethodサンプルコード
"""
class StaticSample():
    def can_not_call(self):
        print("can't call")

    @staticmethod
    def static_sample():
        self.can_not_call()    #呼び出せない

インスタンスとやりとりしない関数は@staticmethodで書いたほうがはやくなるのかな? とおもったらそうらしい。→参考

なのでインスタンスとやりとりのない関数は@staticmethodで書こう!