python @property的用法及含義全面解析 - 程式前沿

文章推薦指數: 80 %
投票人數:10人

在接觸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



請為這篇文章評分?