一句话解释python的装饰器_如何理解python的描述器和装饰器?
好家伙,这一堆答案就没个简单明了的,让我来。
1.装饰器
有个装饰器函数funcA,有个被装饰的函数funcB,如果用funcA装饰funcB,那么后续的调用时funcB执行效果就funcA(funcB)。
当然装饰器函数funcA写法需要有一定规则,其参数必须是函数,当被装饰函数funcB有参数时,funcA内要再写一层和funcB签名一样的wrapper函数,并return wrapper,具体形式可以百度,到处都是。
python用@符号完成了装饰器模式,很好的遵循了开闭原则,应用于授权,日志等场景,还实现一些其他设计模式,例如单例模式等
2.描述符
不知道python为什么单独起这么个名字,如果你重写了类的__set__,__get__,(__delete__)方法,那么这个类就是描述符类,使用此类/实例的属性的时候,就会触发这些方法,用.访问属性时触发__get__,用=给属性赋值时触发__set__,del属性时触发__delete__,重写时格式要遵循描述符协议。
@property实质上等效实现了上述方法,如果你想做一些更高级的用法,例如属性不存在时给个默认值,就可以重写这些方法,本质上和__init__等内置方法是类似的
够不够清楚,够不够简单