91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中property特性屬性指的是什么

發布時間:2020-09-03 15:21:46 來源:億速云 閱讀:180 作者:小新 欄目:編程語言

Python中property特性屬性指的是什么?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!

在Java中,通常在類中定義的成員變量為私有變量,在類的實例中不能直接通過對象.屬性直接操作,而是要通過getter和setter來操作私有變量。

而在Python中,因為有property這個概念,所以不需要寫getter和setter一堆重復的代碼來操作私有變量。Python“私有變量”通常在變量前加上“_”或者“__”,例如_attr或者__attr,這是約定俗成的規范。

Python中property特性屬性指的是什么

把私有屬性變成只讀特性

class MyClass:
    def __init__(self, x):
        self._x = x

這里定義了一個MyClass類,它有一個實例變量_x,綁定了用戶傳來的x值。_x是私有變量,通過obj._x獲取私有變量不符合語言規范,進而我們要使_x變成property(特性),通過obj.x直接訪問。

改造后的代碼如下:

class MyClass:
    def __init__(self, x):
        self._x = x
    @property
    def x(self):
        return self._x
    
>>> obj = MyClass(10)
>>> obj.x
10

我們把_x變成了property特性,以只讀的方式獲取x的值。

我們現在想為x賦值該怎樣做呢?

>>> obj.x = 999
Traceback (most recent call last):
  File "xxx", line 14, in <module>
    obj.x = 23
AttributeError: can't set attribute

可以看到,拋出了AttributeError: can't set attribute。顯然,只讀方法不支持賦值。

把私有變量變成可賦值的特性

我們只需要在上述代碼改造成:

class MyClass:
    def __init__(self, x):
        self._x = x
    @property
    def x(self):
        return self._x
    
    @x.setter
    def x(self, value):
        self._x = value
>>> obj = MyClass(10)
>>> obj.x = 999
>>> obj.x
999

可以看到,我們為x添加了setter,可以直接為obj.x賦值操作。

property屬性能夠遮蓋實例屬性

繼續上面的代碼,我們看看以下的操作:

>>> obj = MyClass(10)
>>> obj.__dict__
{'_x': 999}  #此時實例變量中有_x的值
>>> obj.__dict__['x'] = 99999  #設置obj的實例變量有x值,跟property屬性重名!
>>> obj.__dict__
{'_x': 999, 'x': 99999}  #此時實例變量中有_x和x的值
>>> obj.x     #結果是obj的實例變量還是property屬性?
10

如上代碼所示,obj對象有一個_x實例變量和一個x的property屬性,我們又強行為obj增加了一個x實例變量,這個實例變量x和property屬性x同名!

通過obj.x我們得知,返回的是property屬性,說明property屬性會遮蓋實例屬性!也可以理解為property屬性的優先級更大!

property類解析

我們通常使用內置的@property裝飾器。但其實property是一個類,python中類和函數的調用方式都差不多,他們都是可調用對象。

property的構造方法如下:

class property(object):
    def __init__(self, fget=None, fset=None, fdel=None, doc=None):
        """"""

它最大接受4個參數,都可以為空。

第一個為getter,第二個為setter,第三個為delete函數,第四個為文檔。

上述代碼的另一種寫法

class MyClass:
    def __init__(self, x):
        self._x = x
    def get_x(self):
        return self._x
    def set_x(self, value):
        self._x = value
    x = property(get_x, set_x)
>>> obj = MyClass(10)
>>> obj.x
10

如上,x是property的實例,設置了getter和setter,作為類變量放在MyClass類中。

以上就是property屬性的解析。

感謝各位的閱讀!看完上述內容,你們對Python中property特性屬性指的是什么大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安塞县| 怀远县| 青岛市| 曲松县| 乌审旗| 临漳县| 镇沅| 潼关县| 嵩明县| 金堂县| 华坪县| 神木县| 洪雅县| 临颍县| 博野县| 韩城市| 长丰县| 和田县| 吉安县| 奇台县| 五河县| 大邑县| 出国| 东港市| 鹤山市| 开远市| 中宁县| 古田县| 湘潭市| 年辖:市辖区| 登封市| 水富县| 罗平县| 电白县| 贺州市| 上思县| 炎陵县| 武平县| 怀安县| 揭阳市| 大丰市|