摘自: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()