摘自:https://blog.csdn.net/gezailushang/article/details/84291092
https://blog.csdn.net/xiemanr/article/details/72510885
一:函数装饰函数
- 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()