3.11.4 メソッド

メソッドは属性表記を使って呼び出される関数です。メソッドには二つの 種類があります: (リストへのappend()のような) 組み込みメソッド と、クラスインスタンスのメソッドです。組み込みメソッドはそれをサポート する型と一緒に記述されています。

実装では、クラスインスタンスのメソッドに 2 つの読み込み専用の属性 を追加しています: m.im_self はメソッドが操作するオブジェクト で、m.im_func はメソッドを実装している関数です。 m(arg-1, arg-2, ..., arg-n) の呼び出しは、m.im_func(m.im_self, arg-1, arg-2, ..., arg-n) の呼び出しと完全に等価です。

クラスインスタンスメソッドには、 メソッドがインスタンスからアクセス されるかクラスからアクセスされるかによって、それぞれバインド または 非バインド があります。メソッドが非バインドメソッドの 場合、im_self 属性は None になるため、呼び出す際 には self オブジェクトを明示的に第一引数として指定しなければ なりません。この場合、self は非バインドメソッドのクラス (サブクラス) のインスタンスでなければならず、そうでなければ TypeError が送出されます。

関数オブジェクトと同じく、メソッドオブジェクトは任意の属性を取得 できます。しかし、メソッド属性は実際には背後の関数オブジェクト (meth.im_func) に記憶されているので、バインド、ヒバインド メソッドへのメソッド属性の設定は許されていません。 メソッド属性の設定を試みると TypeError が送出されます。 メソッド属性を設定するためには、その背後の関数オブジェクトで 明示的に:

class C:
    def method(self):
        pass

c = C()
c.method.im_func.whoami = 'my name is c'

のように設定しなければなりません。 詳しくは Python リファレンスマニュアル を読んで下さい。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。