classmethod

python

はじめに

pythonやってて、いきなり@staticmethodとか@classmethodとかでてきて、なにこれってなった。
ふつうのmethodと、@staticmethodと@classmethodの違いについて理解したこと。

class A():
    self.hoge = 0
    self.hogehoge = 10

    def ふつうのメソッド(self, あといろいろ):
        self.hoge = 1
        return self.hogehoge + 2とか

    @staticmethod
    def スタティックなメソッド(a, b, あといろいろ):
        return a+b+1 とか

    @classmethod
    def クラスメソッド(cls, あといろいろ):
        return cls(1, 2, 3) とか

a = A()

参考にしたページ

【Python】インスタンスメソッド、staticmethod、classmethodの違いと使い方 - DjangoBrothers
PythonをベースとしたWebフレームワーク『Django』のチュートリアルサイトです。入門から応用まで、レベル別のチュートリアルで学習することができます。徐々にレベルを上げて、実務でDjangoを使えるところを目指しましょう。ブログではワンポイントの技術解説や最新トピックを更新しています。

@staticmethodと@classmethodは、いつ使うのか

クラスメソッド(ふつうに何もつけずに使うやつ)

第一引数は自動的に”self=インスタンス”になる。

  • インスタンス変数を使うとき

に使う。そうでないときは使わないほうがいい。

self.hoge = 0
self.hogehoge = 10

def ふつうのメソッド(self, あといろいろ):
    self.hoge = 1
    return self.hogehoge + 2とか

@staticmethod

引数に”self”も”クラス”も使えない。

  • クラス変数、インスタンス変数を使わない(ことを明示する)とき

に使う。

@staticmethod
def スタティックなメソッド(a, b, あといろいろ):
  return a+b+1 とか

@classmethod

第一引数は自動的に”クラス”になる。

  • クラス変数を操作したいとき
  • クラスを返したいとき(インスタンスを作りたいとき)

に使う。

@classmethod
def クラスメソッド(cls, あといろいろ):
    return cls(1, 2, 3) とか

コメント

タイトルとURLをコピーしました