PythonにはJavaのstaticメソッドと同じような意味のメソッドは無いようです。
>>> class C(object): ... def m1(): ... print 'static class method' ... >>> C.m1() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unbound method m1() must be called with C instance as first argument (got nothing instead)
上記エラーメッセージに"unbound method"という単語が出てきます。「非結合メソッド」と訳すようです。
エラーメッセージの内容としては、「非結合メソッド m1() はクラスCのインスタンスを第一引数に取る必要があります」(実際は指定されてないのでTypeError)という意味です。
「非結合メソッド」があれば「結合メソッド」もあります。以下のページがわかりやすく解説してありますので、まずはこちらを参照。
クラスのメソッドには次の3つの属性が設定されます。
参考:
というわけで、軽く実験してみます。
>>> class C(object): pass ... >>> def m1(self): print 'aaa' ... >>> m1 <function m1 at 0x00AF5CB0>
空っぽのクラスと、適当な関数を用意しました。続いて、関数をクラスのメソッドに設定します。
>>> C.m = m1 >>> C.m <unbound method C.m1> >>> c = C() >>> c <__main__.C object at 0x00AF7CB0> >>> c.m <bound method C.m1 of <__main__.C object at 0x00AF7CB0>>
"C.m" だと非結合メソッド、"c.m" だと結合メソッドとしてアクセスされるのが分かります。
>>> c.m.im_class, c.m.im_func, c.m.im_self (<class '__main__.C'>, <function m1 at 0x00AF5CB0>, <__main__.C object at 0x00AF7CB0>) >>> C.m.im_class, C.m.im_func, C.m.im_self (<class '__main__.C'>, <function m1 at 0x00AF5CB0>, None)
非結合メソッドの方の "im_self" はドキュメントの通り、Noneになっています。
"3.11.4 Methods"にありますが、im_funcとim_selfを使えば
c.m(arg1, arg2, ...)
を
c.m.im_func(c.m.im_self, arg1, arg2, ...)
と書けるようです。
>>> c.m.im_func(c.m.im_self) aaa
確かに呼べています。
以上。
なおクラスメソッドやJavaのstaticメソッドに相当する機能は、classmethod(), staticmethod() をデコレータとして使うことで実現できるようですが、それについては後日調べてみます。