少說話多寫程式碼之Python學習049——類的成員(property函式)
阿新 • • 發佈:2018-11-25
如果要訪問類中的私有變數,根據面向物件原則,是不能直接訪問的,這裡有一個訪問器的概念。將私有變數進行封裝,公佈出訪問的方法。比如下面這樣,
一個矩形型別,設定大小,然後獲取大小。
class Rectangle: def __init__(self): self.width=0 self.height=0 def setSize(self,size): self.width,self.height=size def getSize(self): return self.width,self.height r=Rectangle() r.width=100 r.height=61.8 print(r.getSize()) r.setSize((1000,618)) print(r.getSize())
輸出
(100, 61.8)
(1000, 618)
對於矩形類來說,setSize和getSize就是一個訪問器,其對應的值是width和height。如果矩形類中增加了其他欄位,勢必每個欄位都要公佈訪問器,即寫一個get和set方法。Python中有一個函式可以很好解決這個問題。就是property函式。
對於剛才的矩形類,我們做一個改進,
_metachclass_=type class Rectangle1: def __init__(self): self.width=0 self.height=0 def setSize(self,size): self.width,self.height=size def getSize(self): return self.width,self.height size=property(getSize,setSize) r1=Rectangle1() r1.width=10 r1.height=6.18 print(r1.size) r1.size=1,0.618 print(r1.width) print(r1.height)
輸出
(10, 6.18)
1
0.618
在Rectangle1類中,用property建立了一個屬性size。size雖然取決於setSize和getSize的計算,但是使用起來其實是可以當作屬性的。而實際上property並不是一個函式,它是一個有很多方法的類。具體原理可以自行了解下。
工程檔案下載:https://download.csdn.net/download/yysyangyangyangshan/10805525