如何为动态创建的类添加external_decorator装饰器
给动态创建的类添加装饰器的方法
装饰器的本质是接收一个对象(这里是类)并返回处理后对象的函数,@external_decorator语法糖只是以下代码的简写:
class Robot: # 类定义 Robot = external_decorator(Robot)
所以给动态创建的类添加装饰器,只需要把type()创建的类对象传入装饰器函数,再将返回值赋值给类名即可,有两种实现方式:
方式一:分步创建与装饰
def Rob_init(self, name): self.name = name # 1. 先动态创建未装饰的类 Robot2 = type("Robot2", (), {"counter":0, "__init__": Rob_init, "sayHello": lambda self: "Hi, I am " + self.name}) # 2. 对创建好的类应用装饰器 Robot2 = external_decorator(Robot2)
方式二:一步完成创建与装饰
直接把type()的返回值作为参数传入装饰器,简化为一行:
def Rob_init(self, name): self.name = name Robot2 = external_decorator( type("Robot2", (), {"counter":0, "__init__": Rob_init, "sayHello": lambda self: "Hi, I am " + self.name}) )
两种方式的效果和静态类使用@external_decorator完全一致,都是让external_decorator处理动态生成的类,最终得到装饰后的类对象。
内容的提问来源于stack exchange,提问作者Grigory Ilizirov
相关产品推荐
相关产品推荐

