函數裝飾器、類裝飾器
阿新 • • 發佈:2019-02-19
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被裝飾後變成了類的一個屬性,而不是方法。
函數裝飾器、類裝飾器