
270
第 7 章 データ型とプロトコル
クトが作成されます。
>>> spam = Spam() # Spam
インスタンスを作成
>>> spam.ham # Spam
インスタンスから関数を取得
<bound method Spam.ham of <__main__.Spam object at 0x10e7fb210>>
>>> type(spam.ham)
<class 'method'>
メソッドオブジェクトは、インスタンスからメソッドを取得するたびに新しく作成され、メソッ
ドを取得したインスタンスと、取得した関数オブジェクトを属性として記録しています。
>>> ham_method = spam.ham # ham
メソッドオブジェクトを作成
>>> ham_method.__self__ #
取得元インスタンス
<__main__.Spam object at 0x10e7fb210>
>>> ham_method.__func__ #
取得した関数オブジェクト
<function Spam.ham at 0x10e7ae9e0>
メソッドオブジェクトを呼び出すと、記録したインスタンスを第一引数として、関数オブジェク
トを呼び出します。インスタンスからメソッドオブジェクトを取得して保存し、後から呼び出す場
合でも、どのインスタンスで実行するかを指定する必要がありません。
>>> ham_method = spam.ham # ham
メソッドオブジェクトを作成
>>> ham_method() #
インスタンスを明示的に指定する必要はない ...