摘要: 修改类定义可以通过单继承,多继承(mixin),以及元类等。其实,装饰器也可以修改类定义,并且和上述提到的方案相比,更简洁直观,性能也更强。 如下: 阅读全文
posted @ 2020-02-04 21:35 Jeffrey_Yang 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 编写一个装饰器,在包装函数的调用签名中添加一个额外的参数。 但是,添加的参数不会干扰该函数的现有调用约定。 额外的参数可以通过关键字参数注入到调用签名中,如下: 若被包裹的函数已经定义了额外增加的参数,则程序会崩溃。 聪明的人会发现,使用装饰器后,新的函数的签名并没有包含 debug 参数,如下: 阅读全文
posted @ 2020-02-04 21:14 Jeffrey_Yang 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 此处必须定义类对象的__call__()方法,因为在装饰器起作用时,实际上是Profiled的实例对象充当wrapper函数。实例对象要作为函数调用(使得其变成callable对象),必须实现__call__()方法。 此外,必须实现__get__()方法以使Spam的bar方法变成描述符对象,并通 阅读全文
posted @ 2020-02-04 19:58 Jeffrey_Yang 阅读(322) 评论(0) 推荐(0) 编辑