對裝飾器有疑問。我想了解python中的裝飾器概念,但在類中使用裝飾器。 with_class.py如何在python中的面向對象的程序中實現裝飾器
class decorate:
def __init__(self,f):
self.f = f
def __call__(self)
self.f()
@decorate
def foo():
print "inside foo"
foo()
我把整個代碼的單個.py文件裏,並執行按預期。 輸出:裏面富氏
但後來我試圖創建一個對象的類裝飾另一個.py文件,並試圖執行獲得相同的輸出。 評論第一個.py文件中的foo()
,並在第二個.py文件中使用下面的代碼。
use_class.py
import with_class
a = with_class.decorate()
但它拋出錯誤TypeError: __init__ takes exactly 2 arguments(1 given)
。預計在撥打__init__
時,我們應該提供2個參數。 但是我沒有得到use_class.py
上執行方法foo
所要傳遞的信息。 我再次試圖通過從__init__
中刪除f
來使用__call__(self,f)
,但它也給出了錯誤。 看來我沒有得到這個概念。
如果你已經寫了'decorate'作爲函數,你會通過什麼參數呢?傳遞這個論點。 – user2357112
你爲什麼叫'裝飾'?你應該調用'with_class.foo()'。 – Bakuriu
裝修是一流的。 –