# coding:utf-8
import logging
import time
from functools import wraps
logger = logging.getLogger(__name__)
def roll_back(func):
"""类中使用的装饰器"""
@wraps(func) # 在使用装饰器过程中的文档字符串的处理
def _inner(self, *args, **kwargs): # 此处的 self 为类的实例化对象,可以创建多个实例化对象打印 id 查看
try:
st = time.time()
f_res = func(self, *args, **kwargs)
time.sleep(0.5)
logger.warning("cost time : {}".format(time.time() - st)) # 模拟装饰器增加功能
return f_res
except Exception as e:
logger.error(str(e))
self.occur_err() # 当出现异常的时候调用实例化对象绑定的方法
return False
return _inner
class ClsDemo(object):
def __init__(self):
pass
@roll_back
def work(self, a: int, b: int) -> int: # 数据类型的检测,在pycharm中会有类型检测提示
"""装饰器增加功能"""
return a + b
def occur_err(self):
logger.error("程序运行异常")
if __name__ == '__main__':
cls_obj_1 = ClsDemo()
cls_obj_2 = ClsDemo()
res1 = cls_obj_1.work(2, b=3)
print(45, res1)
res2 = cls_obj_2.work('5', b=6)
print(48, res2)
python类中使用装饰器,数据类型检测
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 来源:segmentfault 背景 闲来无事想熟悉一下Python的装饰器写法,就写了一个简单的类型检查装饰器。...
- 以前在学习python装饰器时,多数教学资料对装饰器的介绍案例大多是对一个己经存在的函数,在不修改其代码的前提下对...