Pythonでのクラスメソッド・静的メソッド
Pythonでのクラスメソッド・静的メソッド
クラスのもつメンバ関数として、通常のインスタンスメソッド (instance methods)*1以外に静的メソッドとクラスメソッドが存在する
静的メソッド
静的メソッドは要は引数にselfをもたないクラスのメンバ関数のこと。よってインスタンス変数にはアクセスできない。
これを明示的に表現するために
@staticmethod
というデコレータが存在する
class A(object): ... @staticmethod def my_static_method(): print 'I do not access to A'
クラスメソッド
これは継承(inheritance)を使うときに使用する*2。
class A: @classmethod def introduce(cls): print("Hello, I am %s!" %cls) class SubA(A): pass SubA.introduce() # Hello, I am __main__.SubA!
引数のclsはなんらかのクラスであり、インスタンスではない。よってこちらもインスタンス変数*3にはアクセスできない。
これが有用なのは継承を行う場合だ。上の例では、継承時のクラス変数の値が子のクラス変数の値となっている点に注意。
またここでclass methodの第一引数のcls
はkeywordではなく単なる慣習であることに注意。 この慣習は class methodでは第一引数は実体をもったインスタンス(self)ではなく、 クラスオブジェクト自身であることを明示的に表現するために用いられる.