類的裝飾器

2022-07-27 02:45:14 字數 2747 閱讀 8840

類的裝飾器

#

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)

類裝飾器的應用

class

typed:

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...