python装饰器用法

这篇博客探讨了Python中装饰器的使用,特别是在类方法`__init__`上的应用。`configurable`装饰器用于检查参数,如果存在`cfg`,则通过`from_config`类方法转换参数并调用`__init__`;否则,直接调用`__init__`。此设计模式在处理配置对象时非常有用,确保了初始化过程的灵活性。
摘要由CSDN通过智能技术生成

装饰类初始器

class A:
    @configurable
    def __init__(self, a, b=2, c=3):
        pass

    @classmethod
    def from_config(cls, cfg):  # 'cfg' must be the first argument
        # Returns kwargs to be passed to __init__
        return {"a": cfg.A, "b": cfg.B}

python的装饰器

这种用法基本属于装饰器的标准写法——在函数func签名上方写“@decorator”(decorator代指装饰器名称)。

解释器在调用该func函数时,等同于执行:

func = decorator(func) # decorator生成一个将func函数包装后的函数并返回,并同名覆盖func
func()	# 调用上方decorator生成的函数`

“等同于”的说法可能不够准确,因为第一句func = decorator(func)是在函数声明处执行的,且只执行一次。

同样,上面configurable的例子,也是在configurable函数中,将传进来的__init__函数包装,此后调用__init__函数等同于调用configurable包装的函数。那么包装后的函数长什么样子呢,具体行为是:

检查入参是否含有cfg
如含有cfg,调用该类的from_config类方法(classmethod),将cfg转换成参数字典,调用__init__。
如无cfg,直接按原参数列表调用__init__。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值