Python中的property

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方法)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Python中有個很贊的概念,叫做property,它使得面向對象的編程更加簡單。在詳細解釋和深入了解Python...
    chen_000閱讀 881評論 0 1
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,973評論 19 139
  • Python中有一個被稱為屬性函數(property)的小概念,它可以做一些有用的事情,將類方法轉換為只讀屬性 使...
    MiracleJQ閱讀 104評論 0 0
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,767評論 18 399
  • 我曾經幻想過自己會收獲這樣一種愛情,我們不再激情如火,但是黎明來臨前當我轉身過去會觸碰到一個溫暖的胸膛,無意識的親...
    Littleballball閱讀 367評論 0 0