Python——装饰器

1.装饰函数

def outer(fun):
    def wrapper():
        # 加入你的骚操作
        return fun()
    return wrapper

2.装饰带参函数

def outer(fun):
    def wrapper(*args, **kwargs):
        # 加入你的骚操作
        return fun(*args, **kwargs)
    return wrapper

3.装饰实例方法

def outer(fun):
    def wrapper(self, *args, **kwargs):
        # 加入你的骚操作
        return fun(self, *args, **kwargs)
    return wrapper

4.函数被装饰后,函数名不改变

import functools
def outer(fun):
    @functools.wraps(fun)
    def wrapper(self, *args, **kwargs):
        # 加入你的骚操作
        return fun(self, *args, **kwargs)
    return wrapper

5.装饰器工厂,实现动态装饰函数

def get_args(args_1, args_2)
    def outer(fun):
        def wrapper(*args, **kwargs):
            print(args_1, args_2)
            # 加入你的骚操作
            return fun(*args, **kwargs)
        return wrapper
    return outer

6.装饰器实现单例

import functools
def singleton(cls):
    instances = {}
    @functools.wraps(cls)
    def getinstance(*args, *kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return getinstance

7.类装饰器装饰函数

class Decorate():
    def __init__(self,fun):
        self.fun = fun
    def __call__(self, *args, **kwargs):
        #加入你的骚操作
        self.fun(*args, **kwargs)

@Decorate
def fun(a,b):           # fun 不再是函数而是Decorate
    pass

fun(1,2)                # 在fun()时自动执行__call__方法

8.装饰器装饰类

def decorate(My_cls):
    my_cls.name = brook_
    return my_cls

@decorate
class My_cls:
    pass

print(My_cls.name)   
-->  brook_

9.实现装饰普通函数与装饰方法的兼容

method_decorator()
def decorator(fun):
    def wrapper(*args, **kw):
        return fun(*args, **kw)
    return wrapper

#装饰普通函数
@decorator
def fun2():
    pass

class Test:
    @method_decorator(decorator)
    def fun3(self):
        pass
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值