@classmethod【クラスメソッド】@staticmethod【静的メソッド】 @classmethod【クラスメソッド】3.9 / 3.10@staticmethod【静的メソッド】3.10 メモクラスメソッド・静的メソッド のデコレータ (def【関数定義】も参照) デコレータ引数クラスから呼び出しインスタンスから呼び出し用途@classmethod【クラスメソッド】cls(クラス) + 任意●● クラス毎の情報参照 (継承時に有用)@staticmethod【静的メソッド】任意●● 継承時も固定情報参照(C系言語の静的メソッド相当)なし (通常メソッド)self(インスタンス) + 任意● インスタンス毎の情報参照下記メソッド属性を継承 3.10 __module__ __name__ __qualname__3.3 __doc__ __annotations__ __wrapped__ 3.10 @classmethod【クラスメソッド】はproperty()等のデスクリプタのラップが可能 3.9 外部リンクPython 標準ライブラリ組み込み関数@classmethod@staticmethod Python 言語リファレンスデータモデル標準型の階層 bpo-43682 構文 @classmethod 【メソッド定義】 @staticmethod 【メソッド定義】 例 class Parent(): msg = "[Parent]" def __init__(self, name): self.name = name @classmethod def class_method(cls): print("class_method() " + cls.msg) @staticmethod def static_method(): print("static_method() " + Parent.msg) def method(self): print("method() " + self.name) class Child(Parent): msg = "[Child]" obj1 = Parent("TARO") Parent.class_method() # 出力:class_method() [Parent] Parent.static_method() # 出力:static_method() [Parent] #Parent.method() # TypeError 例外 obj1.class_method() # 出力:class_method() [Parent] obj1.static_method() # 出力:static_method() [Parent] obj1.method() # 出力:method() TARO obj2 = Child("ICHIRO") Child.class_method() # 出力:class_method() [Child] Child.static_method() # 出力:static_method() [Parent] #Child.method() # TypeError 例外 obj2.class_method() # 出力:class_method() [Child] obj2.static_method() # 出力:static_method() [Parent] obj2.method() # 出力:method() ICHIRO