大家也許知道C#中提供了屬性Property這個概念,讓我們在對私有成員賦值、獲取時更加方便,而不用像C++分別定義set*和get*兩個函數,在使用時也就像直接使用變量一樣。
今天突然發現Python中竟然也提供了如此類似的方法,感到甚為親切,發上來大家一起討論一下,有不妥的地方還請多多指教。
假設定義了一個類:C,該類必須繼承自object類,有一私有變量__x
- class C:
- def __init__(self):
- self.__x=None
- 1.現在介紹第一種使用屬性的方法:
- 在該類中定義三個函數,分別用作賦值、取值和刪除變量(此處表達也許不很清晰,請看示例)
- def getx(self):
- return self.__x
- def setx(self,value):
- self.__x=value
- def delx(self):
- del self.__x
在類中在增加一條語句:x=property(getx,setx,delx,''),property函數原型為property(fget=None,fset=None,fdel=None,doc=None),所以根據自己需要定義相應的函數即可。
現在這個類中的x屬性便已經定義好了,我們可以先定義一個C的實例c=C(),然後賦值c.x=100,取值y=c.x,刪除:del c.x。是不是很簡單呢?請看第二種方法
下面看第二種方法(在2.6中新增)
首先定義一個類C:
- class C:
- def __init__(self):
- self.__x=None
- 下面就開始定義屬性了
- @property
- def x(self):
- return self.__x
- @x.setter
- def x(self,value):
- self.__x=value
- @x.deleter
- def x(self):
- del self.__x
到此為止就可以像上面一樣使用x屬性了。。如果打算設為只讀或者只寫屬性,那就定義一個函數吧,不過同一屬性的三個函數名要相同。