python类中使用装饰器,数据类型检测

2019-01-06  本文已影响0人  sixiyizai
# 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)
上一篇下一篇

猜你喜欢

热点阅读