def deco(func):
print(‘=============>‘)
return func
@deco #test = deco(test)
def test():
print(‘test函数‘)
test()

def deco(obj):
print(‘=============>‘)
obj.x = 1
obj.y = 2
obj.z = 3
return obj
@deco #test = deco(test)
def test():
print(‘test函数‘)
print(test.__dict__)
def deco(**kwargs):
def wrapper(obj):
for key,val in kwargs.items():
setattr(obj,key,val)
return obj
return wrapper
@deco(x = 1,y = 2, z = 3) #1.deco(x= 1,y= 2,z=3) --->wrapper 2.Foo = wrapper(Foo)
class Foo:
pass
print(Foo.__dict__)
@deco(name= ‘jinling‘)
class Bar:
pass
print(Bar.name)
print(Bar.__dict__)

class Typed:
def __init__(self,key,excp_typed):
self.key = key
self.excp_typed = excp_typed
def __get__(self, instance, owner):
print(‘正在执行get方法‘)
return instance.__dict__[self.key]
def __set__(self, instance, value):
print(‘正在执行set方法‘)
if not isinstance(value,self.excp_typed):
raise TypeError("你传入的参数类型不是",self.excp_typed)
instance.__dict__[self.key] = value
def __delete__(self, instance):
print("正在执行delete方法")
instance.__dict__.pop(self.key)
def deco(**kwargs): #kwargs = {‘name‘;str,‘age‘:int}
def wrapper(obj): #obj = People
for key, val in kwargs.items(): #((‘name‘,str),(‘age‘,int))
print("=====>")
setattr(obj, key,Typed(key,val)) #People.name = Type(‘name‘,str)
return obj
return wrapper
@deco(name = str, age = int) #@wrapper ==>People = wrapper(People)
class People:
def __init__(self,name,age,salary):
self.name = name
self.age = age
self.salary = salary
p1 = People(‘jinling‘,19,13000)
print(p1.__dict__)
原文:https://www.cnblogs.com/dabai123/p/11666055.html