类的装饰器
#类的装饰器 def deco(**kwargs): def war(obj): for key,val in kwargs.items(): setattr(obj,key,val) #将传的参数添加到类属性字典中 return obj return war @deco(x=1,y=2) #运行war,并传参数-->Foo = war(Foo) class Foo: pass print(Foo.__dict__)
#例题 class Typed: def __init__(self,key,expected_type): self.key = key self.expected_type = expected_type def __get__(self, instance, owner): print("执行get") def __set__(self, instance, value): print("执行set") # print(value) if not isinstance(value,self.expected_type): raise TypeError("请输入 %s 类型" %self.expected_type) instance.__dict__[self.key] = value def __delete__(self, instance): print("执行delete") def deco(**kwargs): def war(obj): for key,val in kwargs.items(): setattr(obj,key,Typed(key,val)) #实现name = Type(”name“,str) return obj return war @deco(name=str) class People: # name = Typed("name",str) def __init__(self,name,age,salary): self.name = name self.age = age self.salary = salary p1 = People("ss",22,23.4) print(p1.__dict__)