1. 程式人生 > >少說話多寫程式碼之Python學習049——類的成員(property函式)

少說話多寫程式碼之Python學習049——類的成員(property函式)

 如果要訪問類中的私有變數,根據面向物件原則,是不能直接訪問的,這裡有一個訪問器的概念。將私有變數進行封裝,公佈出訪問的方法。比如下面這樣,
 一個矩形型別,設定大小,然後獲取大小。

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