最近,我看到下面的代碼作為一個問題的答案:
class Proxy:
def __init__(self, obj):
self._obj = obj
def __getattr__(self, attr):
try:
value = getattr(self._obj, attr)
except Exception:
raise Exception('No Such Method')
else:
return value
class Tmp:
def __init__(self, num):
self.num = num
def set_num(self, num):
self.num = num
print(self.num)
tmp = Tmp(10)
tmp_proxy = Proxy(tmp)
tmp_proxy.set_num(12)
如您所見,它用于tmp_proxy呼叫set_num()object 的方法 tmp。但我不明白它是如何將引數傳遞num給這個方法的,因為當我們列印attr及其型別時,我們會看到:
set_num
<class 'str'>
這是如何運作的?
uj5u.com熱心網友回復:
tmp_proxy不打電話 set_num;它提供了對適當系結方法的參考。value是那個系結方法,而不是回傳值。您可以更明確地重寫此代碼:
f = tmp_proxy.set_num # get a bound method
f(12) # call the bound method
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/507291.html
