python [总结] Python装饰器(装饰师)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python [总结] Python装饰器(装饰师)相关的知识,希望对你有一定的参考价值。
"""
python装饰器一共有四种类型, 推荐使用类来实现装饰器, 以修饰类或者函数
参考链接:
1. https://blog.csdn.net/xiemanR/article/details/72510885
"""
# 一:函数装饰函数
def wrapFun(func):
def inner(a, b):
"""
覆盖doc
"""
print('function name:', func.__name__)
print('function doc:', func.__doc__)
r = func(a, b)
return r
return inner
@wrapFun
def myadd(a, b):
"""
myadd的doc
"""
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()
# 五: 类修饰类方法(不推荐, 推荐使用函数修饰类方法)
class ShowFunName():
def __init__(self, func):
self._func = func
def __call__(self, *args, **kwargs):
print('function name:', self._func.__name__)
return self._func(*args, **kwargs)
class Test1():
def __init__(self):
pass
@ShowFunName
def bar(self, a):
return a
test = Test1()
print(test.bar(test, 1)) # 注意: 这里调用的时候一定要显式传入self.
以上是关于python [总结] Python装饰器(装饰师)的主要内容,如果未能解决你的问题,请参考以下文章
Python 装饰器总结
python 装饰器使用总结
Python装饰器总结
python装饰器原理和用法总结
python 装饰器总结
python全栈学习总结六:装饰器