python 類的裝飾器

2022-09-07 16:12:20 字數 2708 閱讀 3440

我們知道,在不改變原有**的基礎上,我們可以使用裝飾器為函式新增新的功能。同理,一切皆物件,我們也可以使用裝飾器為類新增類屬性。what?

def

deco(obj):

obj.x = 1obj.y = 2

return

obj@deco

#foo = deco(foo)

class

foo:

pass

print(foo.__dict__)

上述的**為foo屬性字典新增了x和y屬性,但如果想新增'name' = 'harden'呢,這需要更靈活的定義了。so

def deco(**kwargs):

def

for k, v in

kwargs.items():

setattr(obj, k, v)

return

obj

return

@deco(x=1, y=2)

class

foo:

pass

print(foo.__dict__)

我們再定義類bar,

@deco(name='

curry')

class

bar:

pass

name屬性也可以新增進去

再來個公升級版,利用資料描述符和類的裝飾器為類屬性限定資料型別

我們知道,在不改變原有**的基礎上,我們可以使用裝飾器為函式新增新的功能。同理,一切皆物件,我們也可以使用裝飾器為類新增類屬性。what?

defdeco(obj):

obj.x = 1obj.y = 2

return

obj@deco

#foo = deco(foo)

class

foo:

pass

print(foo.__dict__

)上述的**為foo屬性字典新增了x和y屬性,但如果想新增

'name

' = '

harden

'呢,這需要更靈活的定義了。so

def deco(**kwargs):

def

for k, v in

kwargs.items():

setattr(obj, k, v)

return

obj

return

@deco(x=1, y=2)

class

foo:

pass

print(foo.__dict__

)我們再定義類bar,

@deco(name='

curry')

class

bar:

pass

name屬性也可以新增進去

再來個公升級版,利用資料描述符和類的裝飾器為類屬性限定資料型別

#資料描述符,**另乙個新式類的屬性

class

typedef:

def__init__

(self, key, expected_type):

self.key =key

self.expected_type =expected_type

def__get__

(self, instance, owner):

#print('exec __get__')

#print(instance)

#print(owner)

return instance.__dict__

[self.key]

def__set__

(self, instance, value):

#print('exec __set__')

ifnot

isinstance(value, self.expected_type):

raise

typeerror

instance.

__dict__[self.key] =value

def__delete__

(self, instance):

instance.

__dict__

.pop(self.key)

def deco(**kwargs):

def

for k, v in

kwargs.items():

#為obj新增屬性 如 name = tpyedef('name', str)

setattr(obj, k, typedef(k, v))

return

obj

return

@deco(name=str, age=int, salary=float) #

class

people:

def__init__

(self, name, age, salary):

self.name =name

self.age =age

self.salary =salary

p1 = people('

handen

', 18, 111.11)

print

(p1.name)

print(p1.__dict__)

python裝飾器 函式裝飾器,類裝飾器

只要實現此 模式,這個obj就叫乙個裝飾器 參考 函式裝飾器 例子 def decorator func def inner args,kwargs print before.res func args,kwargs print after.return res return inner decor...

python 裝飾器 函式裝飾器 類裝飾器

python函式裝飾器和類裝飾器筆記.usr bin env python coding utf 8 author ivan file decorators.py version from functools import wraps 裝飾器 目的是為了給函式新增附加功能 1.不帶引數裝飾器 此方式...

python 類裝飾器

defouter x definner 函式巢狀 returnx 跨域訪問,引用了外部變數x returninner 函式作為返回值 closure outer 外部變數 函式作為變數賦給closure print closure 執行閉包 實際上,類也可以作為裝飾器。類裝飾器主要依賴於函式 cal...