Python
中的property
是用于實現屬性可管理性的bulit-in數據類型(從表現上來看,property是一個實現了__get__()
和__set__()
方法的類型)。
property主要有兩種使用方式:
# 第一種場景
class PropertyDemo1(object):
def __init__(self):
self._somevalue = 0
def get_value(self):
return self._somevalue
def set_value(self, somevalue):
self._value = somevalue
def del_value(self):
del self._somevalue
x = property(get_value, set_value, del_value, 'This is "X" property.')
pro = PropertyDemo1()
pro.x = 7
del pro.x
print pro.x
# 第二種場景
class PropertyDemo2(self):
_x = 0
def __init__(self):
self._x = 0
@property
def x(self):
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
pro = PropertyDemo2()
pro.x = 7
del pro.x
print pro.x
property
的優勢有以下幾點:
- 可讀性更好 obj.x += 1與obj.set_value(obj.get_value()+1)可讀性高下立判
- 屬性訪問管理 property將對屬性的訪問轉化為get,set,deleter等方法的調用,而在set方法中可以對初始化的數據進行邏輯和格式的校驗,get方法則可以對數據的返回格式和內容進行限制
- 可維護性好 對外以類似內置屬性接口的形式展現,當數據邏輯有變化的時候,只需要修改set或者get方法,而不用調用方做修改,有利于邏輯解耦
- 更好的訪問權限控制 可以方便的設置屬性為只讀(即不寫相應property的set方法)