本文實例講述了Python中property函數用法。分享給大家供大家參考,具體如下:
通常我們在訪問和賦值屬性的時候,都是在直接和類(實例的)的__dict__
打交道,或者跟數據描述符等在打交道。但是假如我們要規范這些訪問和設值方式的話,一種方法是引入復雜的數據描述符機制,另一種恐怕就是輕量級的數據描述符協議函數Property()。它的標準定義是:
+ property(fget=None,fset=None,fdel=None,doc=None)
+ 前面3個參數都是未綁定的方法,所以它們事實上可以是任意的類成員函數
property()函數前面三個參數分別對應于數據描述符的中的__get__
,__set__
,__del__
方法,所以它們之間會有一個內部的與數據描述符的映射。
綜上描述,其實property()
函數主要是用來規范化訪問類的屬性和修改類屬性的值的一種方法。
property()
函數可以用0,1,2,3,4個參數來調用,順序依次是get,set,del,doc,這四個。
property()
的實現方法有兩種,見代碼
第一種:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#!/usr/bin/python #coding: utf-8 class Rectangle( object ): def __init__( self , width, height): self .width = width self .height = height def getSize( self ): return self .width, self .height def setSize( self , size): self .width, self .height = size def delSize( self ): del self .height size = property (getSize, setSize, delSize, "實例對象" ) r = Rectangle( 10 , 20 ) # 輸出此時矩形的長和寬 # 此時執行的是getSize print r.size # 修改size的值 # 此時執行的是setSize r.size = 100 , 200 print r.size del r.height print r.width # height屬性已經被刪除,下面語句會報錯 # print r.size |
運行結果:
(10, 20)
(100, 200)
100
第二種:(裝飾器)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#!/usr/bin/python #coding: utf-8 class Rectangle( object ): def __init__( self , width, height): self .width = width self .height = height # 下面加@符號的函數名要相同 # 第一個是get方法 @property def Size( self ): return self .width, self .height # 此處是set方法,是@property的副產品 @Size .setter def Size( self , size): # 此時接收的是一個元祖 self .width, self .height = size @Size .deleter def Size( self ): del self .width del self .height r = Rectangle( 10 , 20 ) print r.Size r.Size = 100 , 200 print r.Size del r.height # 由于上一步刪除了self.height屬性,所以下面再訪問的時候會報錯 # print r.Size # 可以訪問width,還沒有被刪除 print r.width |
運行結果:
(10, 20)
(100, 200)
100
希望本文所述對大家Python程序設計有所幫助。
原文鏈接:https://blog.csdn.net/you_are_my_dream/article/details/53163232