1. 程式人生 > >函數裝飾器、類裝飾器

函數裝飾器、類裝飾器

sel 一個 self value all color rap func obj

一:函數裝飾函數
def wrapFun(func):
    def inner(a, b):
        print(function name:, func.__name__)
        r = func(a, b)
        return r
    return inner

@wrapFun
def myadd(a, b):
    return a + b

print(myadd(2, 3))

二:函數裝飾類
def wrapClass(cls):
    def inner(a):
        print(class name:, cls.__name__
) return cls(a) return inner @wrapClass class Foo(): def __init__(self, a): self.a = a def fun(self): print(self.a =, self.a) m = Foo(xiemanR) m.fun() 三:類裝飾函數 class ShowFunName(): def __init__(self, func): self._func = func def __call__(self, a):
print(function name:, self._func.__name__) return self._func(a) @ShowFunName def Bar(a): return a print(Bar(xiemanR)) 四:類裝飾類 class ShowClassName(object): def __init__(self, cls): self._cls = cls def __call__(self, a): print(class name:, self._cls.__name__
) return self._cls(a) @ShowClassName class Foobar(object): def __init__(self, a): self.value = a def fun(self): print(self.value) a = Foobar(xiemanR) a.fun()

五:函數裝飾類中的方法
def wrapFun(func):
    def inner(*args, **kwargs):
        r = func(*args, **kwargs)
        return r
    return inner
class Foobar(object):
    def __init__(self, a):
        self.value = a
  

  @wrapFun   def fun(self): print(self.value) a = Foobar(‘xiemanR‘) a.fun()
 
六:類裝飾器裝飾類中的方法:  會報錯,原因是fun被裝飾後變成了類的一個屬性,而不是方法。
 

函數裝飾器、類裝飾器