摘自: https://blog.csdn.net/gezailushang/article/details/84291092
一: 函数装饰函数
- 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()
来源: http://www.bubuko.com/infodetail-3373700.html