@property 可以將python定義的函數“當做”屬性訪問,從而提供更加友好訪問方式,但是有時候setter/getter也是需要的
假設定義了一個類Cls,該類必須繼承自object類,有一私有變量__x
1. 第一種使用屬性的方法:
#!/usr/bin/env python # -*- coding: utf-8 -*- # blog.ithomer.net class Cls(object): def __init__(self): self.__x = None def getx(self): return self.__x def setx(self, value): self.__x = value def delx(self): del self.__x x = property(getx, setx, delx, 'set x property') if __name__ == '__main__': c = Cls() c.x = 100 y = c.x print("set & get y: %d" % y) del c.x print("del c.x & y: %d" % y)
運行結果:
set & get y: 100
del c.x & y: 100
在該類中定義三個函數,分別用作賦值、取值、刪除變量
property函數原型為property(fget=None,fset=None,fdel=None,doc=None),上例根據自己定義相應的函數賦值即可。
2. 第二種方法(在2.6中新增)
同方法一,首先定義一個類Cls,該類必須繼承自object類,有一私有變量__x
class Cls(object): 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 if __name__ == '__main__': c = Cls() c.x = 100 y = c.x print("set & get y: %d" % y) del c.x print("del c.x & y: %d" % y)
運行結果:
set & get y: 100
del c.x & y: 100
說明: 同一屬性__x的三個函數名要相同。