類的裝飾器
#def deco(func):
#print('**********')
#return func##
# @deco #test=deco(test)
## def test():
## print('test函式執行')
## test()##
@deco #foo=deco(foo)
#class foo:
#pass
defdeco(obj):
print('
**********
',obj)
obj.x=1obj.y=2obj.z=3
return
obj#
@deco #foo=deco(foo)
#class foo:
#pass##
print(foo.__dict__)
#一切皆物件
## @deco #test=deco(test)
#def test():
#print('test函式')
#test.x=1
#test.y=1
#print(test.__dict__)
修訂版
def typed(**kwargs):defdeco(obj):
for key,val in
kwargs.items():
#obj.key=val
setattr(obj,key,val)
return
obj
return
deco
@typed(x=1,y=2,z=3) #
1.typed(x=1,y=2,z=3) --->deco 2.@deco---->foo=deco(foo)
class
foo:
pass
print(foo.__dict__)#
@typed(name='egon') #@deco ---->bar=deco(bar)
#class bar:
#pass
#print(bar.name)
類裝飾器的應用
classtyped:
def__init__
(self,key,expected_type):
self.key=key
self.expected_type=expected_type
def__get__
(self, instance, owner):
print('
get方法')
#print('instance引數【%s】' %instance)
#print('owner引數【%s】' %owner)
return instance.__dict__
[self.key]
def__set__
(self, instance, value):
print('
set方法')
#print('instance引數【%s】' % instance)
#print('value引數【%s】' % value)
#print('====>',self)
ifnot
isinstance(value,self.expected_type):
#print('你傳入的型別不是字串,錯誤')
#return
raise typeerror('
%s 傳入的型別不是%s
' %(self.key,self.expected_type))
instance.
__dict__[self.key]=value
def__delete__
(self, instance):
print('
delete方法')
#print('instance引數【%s】' % instance)
instance.__dict__
.pop(self.key)
def deco(**kwargs): #
kwargs=
obj=people
for key,val in kwargs.items():#
(('name',str),('age',int))
setattr(obj,key,typed(key,val))
#setattr(people,'name',typed('name',str)) #people.name=typed('name',str)
return
obj
return
@deco(name=str,age=int) #
class
people:
name='
alex'#
name=typed('name',str)
#age=typed('age',int)
def__init__
(self,name,age,salary,gender,heigth):
self.name=name
self.age=age
self.salary=salary
#p1=people('213',13.3,13.3,'x','y')
print(people.__dict__)
函式裝飾器 類裝飾器
一 函式裝飾函式 defwrapfun func definner a,b print function name func.name r func a,b return r return inner wrapfun defmyadd a,b return a b print myadd 2,3 二...
類的裝飾器
def deco obj obj.x 1 obj.y 2 return obj deco 相當於foo deco foo class foo pass print foo.dict deco 相當於test deco test def test pass print test.dict 輸出 def...
類的裝飾器
類的裝飾器 對不同的類使用裝飾器加上不同的類屬性 def typed kwargs defdeco obj for k,v in kwargs.items setattr obj,k,v return obj return deco typed x 1,y 2,z 3 1 typed x 1,y 2...