#类的装饰器
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__)