python @property的用法及含義全面解析 - 程式前沿
文章推薦指數: 80 %
在接觸python時最開始接觸的程式碼,取長方形的長和寬,定義一個長方形類,然後設定長方形的長寬屬性,通過例項化的方式呼叫長和寬,像如下程式碼 ...
程式語言前端開發IOS開發Android開發雲端運算人工智慧伺服器搜尋資料庫軟體開發工具python@property的用法及含義全面解析2018.07.05程式語言property,python,用法HOME程式語言python@property的用法及含義全面解析Advertisement在接觸python時最開始接觸的程式碼,取長方形的長和寬,定義一個長方形類,然後設定長方形的長寬屬性,通過例項化的方式呼叫長和寬,像如下程式碼一樣。
classRectangle(object):
def__init__(self):
self.width=10
self.height=20
r=Rectangle()
print(r.width,r.height)此時輸出結果為1020但是這樣在實際使用中會產生一個嚴重的問題,__init__中定義的屬性是可變的,換句話說,是使用一個系統的所有開發人員在知道屬性名的情況下,可以進行隨意的更改(儘管可能是在無意識的情況下),但這很容易造成嚴重的後果。
classRectangle(object):
def__init__(self):
self.width=10
self.height=20
r=Rectangle()
print(r.width,r.height)
r.width=1.0
print(r.width,r.height)以上程式碼結果會輸出寬1.0,可能是開發人員不小心點了一個小數點上去,但是會系統的資料錯誤,並且在一些情況下很難排查。
這是生產中很不情願遇到的情況,這時候就考慮能不能將width屬性設定為私有的,其他人不能隨意更改的屬性,如果想要更改只能依照我的方法來修改,@property就起到這種作用(類似於java中的private)
classRectangle(object):
@property
defwidth(self):
#變數名不與方法名重複,改為true_width,下同
returnself.true_width
@property
defheight(self):
returnself.true_height
s=Rectangle()
#與方法名一致
s.width=1024
s.height=768
print(s.width,s.height)
(@property使方法像屬性一樣呼叫,就像是一種特殊的屬性)此時,如果在外部想要給width重新直接賦值就會報AttributeError:can’tsetattribute的錯誤,這樣就保證的屬性的安全性。
同樣為了解決對屬性的操作,提供了封裝方法的方式進行屬性的修改
classRectangle(object):
@property
defwidth(self):
#變數名不與方法名重複,改為true_width,下同
returnself.true_width
@width.setter
defwidth(self,input_width):
self.true_width=input_width
@property
defheight(self):
returnself.true_height
@height.setter
#與property定義的方法名要一致
defheight(self,input_height):
self.true_height=input_height
s=Rectangle()
#與方法名一致
s.width=1024
s.height=768
print(s.width,s.height)此時就可以對“屬性”進行賦值操作,同樣的方法還del,用處是刪除屬性,寫法如下,具體實現不在贅述。
@height.deleter
defheight(self):
delself.true_height總結一下@property提供了可讀可寫可刪除的操作,如果像只讀效果,就只需要定義@property就可以,不定義代表禁止其他操作。
以上這篇python@property的用法及含義全面解析就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援指令碼之家。
目錄1.您可能感興趣的文章:您可能感興趣的文章:Python中用Descriptor實現類級屬性(Property)詳解介紹Python的@property裝飾器的用法例項講解Python程式設計中@property裝飾器的用法PythonProperty屬性的2種用法python的描述符(descriptor)、裝飾器(property)造成的一個無限遞迴問題分享Python黑魔法@property裝飾器的使用技巧解析Python中property屬性例項解析Python中property函式用法例項分析Python基於property實現類的特性操作示例Advertisement写评论取消回覆很抱歉,必須登入網站才能發佈留言。
近期文章Spark入門(一)用SparkShell初嘗Spark滋味2019.12.08Spark入門(二)如何用Idea運行我們的Spark項目2019.12.08Spark入門(三)Spark經典的單詞統計2019.12.08Spark入門(四)Spark的map、flatMap、mapToPair2019.12.08Spark入門(五)Spark的reduce和reduceByKey2019.12.08Spark入門(六)Spark的combineByKey、sortBykey2019.12.08Spark入門(七)Spark的intersection、subtract、union和distinct2019.12.08Spark實戰尋找5億次訪問中,訪問次數最多的人2019.12.08Spark實戰搭建我們的Spark分佈式架構2019.12.08【機器學習】深度學習開發環境搭建2019.12.08AdvertisementAdvertisement
延伸文章資訊
- 1[Python物件導向]3個必須瞭解的Python屬性觀念
另外,也會介紹Python屬性(Property)的應用方式。 實體屬性(Instance Attribute); 類別屬性(Class Attribute); 屬性 ...
- 2Python's property(): Add Managed Attributes to Your Classes
Python's property() is the Pythonic way to avoid formal getter and setter methods in your code. T...
- 3python @property的介绍与使用 - 知乎专栏
python @property的介绍与使用python的@property是python的一种装饰器,是用来修饰方法的。 作用:我们可以使用@property装饰器来创建只读属性,@prope...
- 4python @property的用法及含義全面解析 - 程式前沿
在接觸python時最開始接觸的程式碼,取長方形的長和寬,定義一個長方形類,然後設定長方形的長寬屬性,通過例項化的方式呼叫長和寬,像如下程式碼 ...
- 5Python @property: How to Use it and Why? - Programiz
In this tutorial, you will learn about Python @property decorator; a pythonic way to use getters ...