##
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 リファレンスマニュアル を読んで下さい。