1. 程式人生 > 其它 >Python 中property & eval()的妙用

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自動化測試等,微信搜尋公眾號:“無量測試之道”,或掃描下方二維碼:

新增關注,讓我們一起共同成長!