0
需要幫助。傳遞裝飾器的功能
有一個文件with_class.py來保存類的裝飾器的實現。該函數正在從另一個文件use_class.py中調用。
with_class.py
def __init__(self,f):
self.f = f
def __call__(self,x):
self.f(x)
@decorate
def foo(x):
print "inside foo" , x
use_class.py
import with_class
a = with_class.foo(x)
它工作正常。 現在,如果我想傳遞一個函數來代替x。 我有在with_class.py和use_class.py中定義的函數,我想傳遞給「a = with_class.foo(with_class.decorate.disp())」。 disp()是在類中定義的函數。現在上面的代碼看起來像:
with_class.py
class decorate:
def __init__(self,f):
self.f = f
def __call__(self,g):
self.f(g)
def disp(self):
print "inside the display"
@decorate
def foo(fn):
print "inside foo"
fn()
use_class.py
import with_class
a = with_class.foo(with_class.decorate.disp())
我收到錯誤
"**TypeError: unbound method disp() must be called with decorate instance as first argument**".
是否有人可以幫助我找到哪裏我錯了。
在此先感謝。
...我如上試圖與代碼和它工作得很好。但我嘗試使用另一個文件「use_class.py」,其中:import with_class –
import with_class with_class.foo(decorate.disp)它失敗,錯誤...... NameError:name'decorate'未定義。 –
如果您在另一個名爲with_class的文件中定義了'decorate',那麼您需要將其引用爲'with_class.decorate',否則請執行'from_class import decorate'。這就是Python的工作原理,與裝飾器沒有特別的關係。 –