㈠ Python方法對象的理解與運用
9.3.4. 方法對象
通常,方法通過右綁定方式調用:
x.f()
在 MyClass 示例中,這會返回字元串 'hello world'。然而,也不是一定要直接調用方法。 x.f 是一個方法對象,它可以存儲起來以後調用。例如:
xf = x.f
while True:
print(xf())
會不斷的列印 hello world。
調用方法時發生了什麼?你可能注意到調用 x.f() 時沒有引用前面標出的變數,盡管在 f() 的函數定義中指明了一個參數。這個參數怎麼了?事實上如果函數調用中缺少參數,Python 會拋出異常--甚至這個參數實際上沒什麼用……
實際上,你可能已經猜到了答案:方法的特別之處在於實例對象作為函數的第一個參數傳給了函數。在我們的例子中,調用 x.f() 相當於 MyClass.f(x) 。通常,以 n 個參數的列表去調用一個方法就相當於將方法的對象插入到參數列表的最前面後,以這個列表去調用相應的函數。
如果你還是不理解方法的工作原理,了解一下它的實現也許有幫助。引用非數據屬性的實例屬性時,會搜索它的類。如果這個命名確認為一個有效的函數對象類屬性,就會將實例對象和函數對象封裝進一個抽象對象:這就是方法對象。以一個參數列表調用方法對象時,它被重新拆封,用實例對象和原始的參數列表構造一個新的參數列表,然後函數對象調用這個新的參數列表。