Python 中property & eval()的妙用
技術標籤:Python
學習過Java 程式語言的小夥伴,應該都知道在Java 語言學習過程中會學到類屬性的getter & setter 方法。那麼在Python 中是否也有類似的方法呢?答案是,有的。
今天的分享內容是:如何使用@property 裝飾器去實現Python 中的getter & setter 方法。
在程式碼實操之前,先來了解下@property 裝飾器相關的小知識。有利於更好地理解以下實操程式碼。
1、Python 內建有三大裝飾器:
@staticmethod(靜態方法)
@classmethod(類方法)
@property(描述符)
其中@property 則是一個非常好用的語法糖
@property 最大的好處就是在類中把一個方法變成屬性呼叫,是Python 內建的功能,常用來修飾類方法,用於以訪問屬性的方式呼叫函式。
2、Python 程式碼實現:
1classPerson: 2def__init__(self,name,age,salary): 3self.__name=name 4self.__age=age 5self.__salary=salary 6 7defset_name(self,name): 8self.__name=name 9 10defget_name(self): 11returnself.__name 12 13defset_age(self,age): 14self.__age=age 15 16defget_age(self): 17returnself.__age 18 19defset_salary(self,salary): 20self.__salary=salary 21 22defget_salary(self): 23returnself.__salary 24 25@property 26defage(self): 27returnself.__age 28 [email protected] 30defage(self,age): 31self.__age=age 32 33if__name__=='__main__': 34p1=Person('tom',11,1000) 35print(p1.get_age()) 36p1.set_age(100) 37print(p1.get_age()) 38 39print(p1.age) 40p1.age=28 41print(p1.age) 42 43#eval()的功能:將字串str當成有效的表示式來求值並返回計算結果。如下是將字串轉換成方法名再呼叫: 44defman(): 45return"goodjob" 46print(eval("man")()) 47 48#eval()可以把list, tuple, dict和string相互轉化,這裡以list為示例進行演示: 49list1="[33,2,22,11,44,55]" 50print(type(list1)) 51list2=eval(list1) 52print(type(list2)) 53print(list2) 54print(list2[0])
3、Python 中定義只讀屬性
在Python 中定義只讀屬性非@property莫屬,而定義只讀屬性也很簡單:以需要定義的屬性為方法名(如第26行:將age 屬性定義為方法),在該方法上加上內建裝飾器@property ,同時仍舊以屬性名為方法名(如第30行:將age 屬性定義為方法,並在方法名上增加@age.setter)。
歡迎關注【無量測試之道】公眾號,回覆【領取資源】,
Python程式設計學習資源乾貨、
Python+Appium框架APP的UI自動化、
Python+Selenium框架Web的UI自動化、
Python+Unittest框架API自動化、
資源和程式碼 免費送啦~
備註:我的個人公眾號已正式開通,致力於測試技術的分享,包含:大資料測試、功能測試,測試開發,API介面自動化、測試運維、UI自動化測試等,微信搜尋公眾號:“無量測試之道”,或掃描下方二維碼:
新增關注,讓我們一起共同成長!