新聞中心
今天就跟大家聊聊有關(guān)property函數(shù)如何在Python中使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
具體如下:
通常我們在訪問和賦值屬性的時候,都是在直接和類(實例的)的__dict__
打交道,或者跟數(shù)據(jù)描述符等在打交道。但是假如我們要規(guī)范這些訪問和設(shè)值方式的話,一種方法是引入復雜的數(shù)據(jù)描述符機制,另一種恐怕就是輕量級的數(shù)據(jù)描述符協(xié)議函數(shù)Property()。它的標準定義是:
+ property(fget=None,fset=None,fdel=None,doc=None)
+ 前面3個參數(shù)都是未綁定的方法,所以它們事實上可以是任意的類成員函數(shù)
property()函數(shù)前面三個參數(shù)分別對應(yīng)于數(shù)據(jù)描述符的中的__get__
,__set__
,__del__
方法,所以它們之間會有一個內(nèi)部的與數(shù)據(jù)描述符的映射。
綜上描述,其實property()
函數(shù)主要是用來規(guī)范化訪問類的屬性和修改類屬性的值的一種方法。
property()
函數(shù)可以用0,1,2,3,4個參數(shù)來調(diào)用,順序依次是get,set,del,doc,這四個。
property()
的實現(xiàn)方法有兩種,見代碼
第一種:
#!/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) # 輸出此時矩形的長和寬 # 此時執(zhí)行的是getSize print r.size # 修改size的值 # 此時執(zhí)行的是setSize r.size = 100, 200 print r.size del r.height print r.width # height屬性已經(jīng)被刪除,下面語句會報錯 # print r.size
運行結(jié)果:
(10, 20)
(100, 200)
100
第二種:(裝飾器)
#!/usr/bin/python #coding: utf-8 class Rectangle(object): def __init__(self, width, height): self.width = width self.height = height # 下面加@符號的函數(shù)名要相同 # 第一個是get方法 @property def Size(self): return self.width, self.height # 此處是set方法,是@property的副產(chǎn)品 @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
運行結(jié)果:
(10, 20)
(100, 200)
100
看完上述內(nèi)容,你們對property函數(shù)如何在Python中使用有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
網(wǎng)頁題目:property函數(shù)如何在Python中使用-創(chuàng)新互聯(lián)
URL標題:http://fisionsoft.com.cn/article/doddos.html