簡體   English   中英

Python 將 self 傳遞給裝飾器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM