簡體   English   中英

用class-decorator裝飾class-method

[英]Decorate class-method with class-decorator

我正在嘗試使用class-decorator裝飾類方法。 例如

class MyDecorator(object):
    def __init__(self,param1):
        self.param1 = param1
        # do some action with param1

    def __call__(self,func):
        def wrapped(*args,**kwargs):
             print "in wrapper:"
             func(*args,**kwargs)

        return wrapped

和我的一些班級:

class A:
    @MyDecorator("Blablabla")
    def func1(arg1,arg2,arg3):
         print (arg1,arg2,arg3)

但是當我執行下一個動作時:

a = A()
a.func(1,2,3)

我收到以下錯誤:

TypeError: func1() takes exactly 3 arguments (4 given)
class A:
    @MyDecorator("Blablabla")
    def func1(self, arg1, arg2, arg3):
        print (arg1,arg2,arg3)

您需要將self參數添加到函數中。

如果您想編寫不帶第一個self參數的func1方法,則需要在裝飾器中刪除此參數:

def __call__(self, func):
    def wrapped(obj, *args, **kwargs):
         # obj is just ignored
         print "in wrapper:"
         func(*args, **kwargs)

這與使用@staticmethod :調用a.func1a作為第一個參數傳遞,但此參數已由裝飾器刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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