我發現下面的示例輕度令人吃驚:Python的方法查找規則
>>> class Foo:
def blah(self):
pass
>>> f = Foo()
>>> def bar(self):
pass
>>> Foo.bar = bar
>>> f.bar
<bound method Foo.bar of <__main__.Foo object at 0x02D18FB0>>
我期望與每個特定實例相關聯的綁定的方法,和在結構上被放置在它。這似乎是合乎邏輯的,綁定的方法將不得不爲每個實例不同,所以它知道在通過該實例的底層函數 - 實際上:
>>> g = Foo()
>>> g.blah is f.blah
False
但我的認識過程顯然是有缺陷,因爲我不希望將一個函數分配給一個類的屬性會將它放入已經被創建的實例中。
所以,我的問題是雙重的 -
- 爲什麼分配功能到一個類追溯適用於實例?真正的查找規則和過程是什麼使得這一點成爲現實?
- 這是由語言保證的東西,或只是發生的事情?
啊,對。我沒有意識到/忘記了將實例傳遞給'__get__'的描述符協議。這會教會我閱讀*全部*相關文檔。 :-) – lvc
參考http://wiki.python.org/moin/FromFunctionToMethod瞭解更多信息。 –