Class Method vs. Static Method

  • インスタンスメソッドでインスタンス変数(self)使わない ⇒ クラスメソッド
  • クラスメソッドでクラス変数(cls)を使わない ⇒ スタティックメソッド
class ClassSample:
  class_var = "hoge"

  @classmethod
  def class_method(cls):
    print("%s, class_var: %s" % (cls, cls.class_var))

  @staticmethod
  def static_method():
    print("%s, class_var: %s" % (ClassSample, ClassSample.class_var))

class SubclassSample(ClassSample):
  class_var = "foo"

ClassSample.class_method() # -> __main__.ClassSample, class_var: hoge
ClassSample.static_method() # -> __main__.ClassSample, class_var: hoge
SubclassSample.class_method() # -> __main__.SubclassSample, class_var: foo
SubclassSample.static_method() #
インスタンス変数へのアクセスクラス変数へのアクセス継承時のクラス変数の値
クラスメソッド不可子のクラス変数の値
スタティックメソッド不可自クラスを宣言すれば可宣言したクラスに依存

REFERENCES:

  • https://qiita.com/1plus4/items/b37ec6ea90569ffdebfe