# 代理判断属性类型 class typed: def __init__(self,key,exceted_tupe): self.key = key # 把name传入 self.exceted_type = exceted_tupe # 需求类型 def __set__(self, instance, value): print("********set********") if not isinstance(value,self.exceted_type): # 判断输入的类型是否正确 raise TypeError("%s输入的不是%s类型"%(value,self.exceted_type)) instance.__dict__[self.key] = value # 把name添加到 实例属性字典 def __get__(self, instance, owner): print("*****get*****") def __delete__(self, instance): print("*****delete****") # 实例属性先传入装饰器 装饰器把数据传给描述符代理 def deco(**kwargs): def warpper(obj): for k,v in kwargs.items(): setattr(obj,k,typed(k,v)) # typed()传给描述符 判断 # setattr 给people添加属性 return obj return warpper @deco(name=str,age=int) class people: def __init__(self,name,age): self.name = name self.age = age p1 = people("ll",2) # 类型不正确就会报错 print(p1.__dict__) # {'name': 'll', 'age': 2} # 执行结果: # ********set******** # ********set******** # {'name': 'll', 'age': 2} # 两个属性调用两次set方法
类装饰器传参 描述符代理判断属性类型
最新推荐文章于 2025-05-11 16:40:51 发布