用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - python代码库

实现一个类装饰器

2021-05-26 作者: gaojiawei举报

[python]代码库

from functools import wraps
import time
import datetime

class TimeIt:
    def __init__(self,fn,):
        print('init')
        self._fn = fn
        # self.__doc__ = self._fn.__doc__
        # self.__name__ = self._fn.__name__
        wraps(self._fn)(self)

    def __enter__(self):
        print('enter')
        self.start = datetime.datetime.now()
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print('exit')
        self.delta = (datetime.datetime.now()-self.start).total_seconds()
        print('context {} took {}'.format(self._fn.__name__,self.delta))
        return

    def __call__(self, *args,**kwargs):
        print('__call__')
        return self._fn(*args,**kwargs)


def logger(fn):
    @wraps(fn)   # wrapper = wraps(fn)(wrapper)
    def wrapper(*args,**kwargs):
        start = datetime.datetime.now()
        ret = fn(*args,**kwargs)
        delta = (datetime.datetime.now() - start).total_seconds()
        print('dec {} took {}'.format(fn.__name__,delta))
        return ret
    return wrapper



@TimeIt
def add(x,y):  # add = TimeIt(add)
    """This is a function~~~~~~~"""
    time.sleep(2)
    return x + y

print(add(5,10))

print(add.__doc__)
print(add.__name__)
print(add.__dict__)
print(type(add))


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...