#navi_header|Python| PythonにはJavaのstaticメソッドと同じような意味のメソッドは無いようです。 >>> class C(object): ... def m1(): ... print 'static class method' ... >>> C.m1() Traceback (most recent call last): File "", line 1, in TypeError: unbound method m1() must be called with C instance as first argument (got nothing instead) 上記エラーメッセージに"unbound method"という単語が出てきます。「非結合メソッド」と訳すようです。 エラーメッセージの内容としては、「非結合メソッド m1() はクラスCのインスタンスを第一引数に取る必要があります」(実際は指定されてないのでTypeError)という意味です。 「非結合メソッド」があれば「結合メソッド」もあります。以下のページがわかりやすく解説してありますので、まずはこちらを参照。 - "Effective Python"の「結合メソッドと非結合メソッド」 -- http://morchin.sakura.ne.jp/effective_python/method.html クラスのメソッドには次の3つの属性が設定されます。 - im_class : クラスオブジェクト - im_func : 関数オブジェクト - im_self : 結合メソッドとしてアクセスされる場合はインスタンス、非結合メソッドとしてアクセスされる場合はNone 参考: - Python Library Reference (Python 2.5) -- "3.11.4 Methods" -- "26.10.1 Types and members" というわけで、軽く実験してみます。 >>> class C(object): pass ... >>> def m1(self): print 'aaa' ... >>> m1 空っぽのクラスと、適当な関数を用意しました。続いて、関数をクラスのメソッドに設定します。 >>> C.m = m1 >>> C.m >>> c = C() >>> c <__main__.C object at 0x00AF7CB0> >>> c.m > "C.m" だと非結合メソッド、"c.m" だと結合メソッドとしてアクセスされるのが分かります。 >>> c.m.im_class, c.m.im_func, c.m.im_self (, , <__main__.C object at 0x00AF7CB0>) >>> C.m.im_class, C.m.im_func, C.m.im_self (, , 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() をデコレータとして使うことで実現できるようですが、それについては後日調べてみます。 #navi_footer|Python|