Python中property特性屬性指的是什么?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!
十多年的海城網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。網絡營銷推廣的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整海城建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。創新互聯從事“海城網站設計”,“海城網站推廣”以來,每個客戶項目都認真落實執行。
在Java中,通常在類中定義的成員變量為私有變量,在類的實例中不能直接通過對象.屬性直接操作,而是要通過getter和setter來操作私有變量。
而在Python中,因為有property這個概念,所以不需要寫getter和setter一堆重復的代碼來操作私有變量。Python“私有變量”通常在變量前加上“_”或者“__”,例如_attr或者__attr,這是約定俗成的規范。
把私有屬性變成只讀特性
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特性屬性指的是什么大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注創新互聯行業資訊頻道。
網站標題:Python中property特性屬性指的是什么
當前地址:http://m.newbst.com/article26/pepcjg.html
成都網站建設公司_創新互聯,為您提供ChatGPT、品牌網站設計、網站策劃、網站維護、網站營銷、外貿網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯