[英]Python passing self to the decorator
我試圖將self
對象傳遞給我的裝飾器以訪問其內容,但出現以下錯誤:
def log_decorator():
def log_real_decorator(f):
@wraps(f)
def wrapper(self,*args, **kw):
print "I am the decorator, I know that self is", self, "and I can do whatever I want with it!"
print "I also got other args:", args, kw
f(*args, **kw)
return wrapper
return log_real_decorator
class Foo(object):
@log_decorator
def meth(self):
print "I am the method, my self is", self
f = Foo()
f.meth()
錯誤:-
TypeError: log_decorator() takes no arguments (1 given)
這是你如何做到的:
def log_real_decorator(f):
@wraps(f)
def wrapper(self, *args, **kw):
print "I am the decorator, I know that self is", self, "and I can do whatever I want with it!"
print "I also got other args:", args, kw
f(self, *args, **kw)
# ^ pass on self here
return wrapper
簡單地傳遞self
。
或者
如果你想創建一個可以同時用於類和方法的通用裝飾器,你可以簡單地這樣做:
def log_real_decorator(f):
@wraps(f)
def wrapper(*args, **kw):
# Do something here
f(*args, **kw)
return wrapper
此外,當您需要將一些參數傳遞給裝飾器時,將使用您創建的裝飾器(例如@log_real_decorator(some_param=1)
。在您的情況下,您不需要它,而是您應該做的是創建一個裝飾器有兩個嵌套函數,就像我在上面所做的那樣,並將其稱為@log_real_decorator
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.