装饰器的一些使用方法

装饰器的一些使用方法

在类中写装饰器

方式一:

class Foo:
    def __init__(self):
        self.name = 'CharmNight'

    def inners(funcs):
        def inner(self, *args, **kwargs):
            ret = funcs(self, *args, **kwargs)
            print(self.name)
            return ret
        return inner

    @inners
    def func(self):
        print('0101')
        return 'over'

f = Foo()
print(f.func())

方式二:

class Demo:

    @staticmethod
    def demo(func):
        def inner(*args, **kwargs):
            ret = func(*args, **kwargs)
            return ret
        return inner

class D4:

    @Demo.demo
    def asd(self):
        print('asd')

d4 = D4()
d4.asd()

方式三:

class Demo:
    def __init__(self, func):
        self.func = func
        self.name = 'CharmNight'

    def __call__(self, *args, **kwargs):
        res = self.func(*args, **kwargs)
        print(self.name)
        return res


@Demo
def func():
    print('0101')
    return 'over'

print(func())
进阶版
import time

class Demo:
    def __init__(self):
        self.name = 'CharmNight'

    def set_name(self, func):
        print(self.name)
        return func

    def get_run_time(self, func):
        def inner(*args, **kwargs):
            start = time.time()
            ret = func(*args, **kwargs)
            print(time.time() - start)
            return ret
        return inner


demo = Demo()


@demo.set_name
def func():
    print('0001')
    return 'over'


@demo.get_run_time
def func2():
    print('0002')
    time.sleep(1)
    return 'over'


print(func())
print(func2())
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值