python 裝飾器和 property裝飾器

2021-10-01 12:24:46 字數 2905 閱讀 9668

裝飾器

1、裝飾器函式的本質:乙個閉包函式

2、裝飾器函式的作用: 在不修改原函式及其呼叫方式的情況下對原函式功能進行擴充套件

3、語法糖 格式:@裝飾器名稱

4、建立帶返回值的裝飾器

5、建立傳遞引數的裝飾器

6、裝飾器的固定格式

def

(f):

definner

(*args,

**kwargs)

: ret=f(

*args,

**kwargs)

return ret

return inner

deffun

(*args,

**kwargs)

:print

("zzz"

)

7、解決被裝飾函式不能檢視資訊bug 匯入wraps from functools import wraps @wraps(func)

練習:

import time

deftimer

(func)

:def

inner()

: start=time.time(

) time.sleep(

0.1)

ret=func(

) end=time.time(

)print

("程式執行的時間{}"

.format

(start-end)

)return ret

return inner

@timer

deffun()

:print

("華晨宇演唱會"

)return

"你去了沒"

ret=fun(

)print

(ret)

結果:

華晨宇演唱會

程式執行的時間-

0.1094198226928711

你去了沒

@property裝飾器

1、@property 內建裝飾器函式,把乙個方法呼叫方式變成屬性呼叫方式。(將一 個方法當成乙個屬性使用)。注意@property裝飾器只能在物件導向中使用。

2、訪問使用@property裝飾器裝飾的函式可以直接呼叫函式名 (會執行一段功能(函式)然後返回值)

3、@property 裝飾器只能修飾不帶引數的方法。

4、@property裝飾器修飾私有方法的getter和setter方法。和控制屬性的訪問權 限­唯讀。

練習:

class

person

:def

__init__

(self,name,age)

: self.__name=name

self.__age=age

@property

defname

(self)

:return self.__name

@property

defage

(self)

:return self.__age

@age.setter

defage(self,age)

:return self.__age

@age.setter

defage(self,age)

:if age<=

0or age>

150:

print

("火星來的吧"

)return

else

: self.__age=age

person=person(

"zs",17

)person.age=

31print

(person.age)

結果:

31
練習2:

bmi指數計算 **的bmi數值: 過輕:低於18.5

正常:18.5­23.9 過重:24­27 肥胖:28­32 非常肥胖, 高於32 體質指數(bmi)=體重(kg)÷身高^2(m) ex:70kg÷(1.75×1.75)=22.86

class

person

:def

__init__

(self,name,weight,height)

: self.name=name

self.weight=weight

self.height=height

@property

defbmi

(self)

:return self.weight/

(self.height**2)

@bmi.setter

defbmi(self,bmi)

:if bmi>

18.5

and bmi<

23.9

:print

("正常"

)else

: bmi=

"18.5---23.9"

print

("不正常,bmi應該在{}"

.format

(bmi)

)people=person(

"as",80

,1.65

)people.bmi=

40print

(people.bmi)

結果:

不正常,bmi應該在18.5--

-23.9

29.384756657483933

python裝飾器 Python 裝飾器

簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...

python裝飾器 裝飾器

由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2015 3 25 f now f 2015 3 25 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強now 函式的...

python裝飾器原理 Python裝飾器原理

裝飾器 decorator 是物件導向設計模式的一種,這種模式的核心思想是在不改變原來核心業務邏輯 的情況下,對函式或類物件進行額外的修飾。python中的裝飾器由python直譯器直接支援,其定義形式如下 decorator def core service 要理解上述 的含義,我們從自定義函式裝...