Python 中property & eval()的妙用
学习过Java 编程语言的小伙伴,应该都知道在Java 语言学习过程中会学到类属性的getter & setter 方法。那么在Python 中是否也有类似的方法呢?答案是,有的。
今天的分享内容是:如何使用@property 装饰器去实现Python 中的getter & setter 方法。
在代码实操之前,先来了解下@property 装饰器相关的小知识。有利于更好地理解以下实操代码。
1、Python 内置有三大装饰器:
@staticmethod(静态方法)
@classmethod(类方法)
@property(描述符)
其中@property 则是一个非常好用的语法糖(语法糖指那些没有给计算机语言添加新功能,而只是对人类来说更“甜蜜”的语法。之所以亲切地称之为“甜蜜”的语法,是因为语法糖往往给程序员提供了更实用的编码方式,有益于更好的编码风格,更易读)。
@property 最大的好处就是在类中把一个方法变成属性调用,是Python 内置的功能,常用来修饰类方法,用于以访问属性的方式调用函数。
2、Python 代码实现:
1class Person: 2 def __init__(self,name,age,salary): 3 self.__name=name 4 self.__age=age 5 self.__salary=salary 6 7 def set_name(self,name): 8 self.__name=name 9 10 def get_name(self): 11 return self.__name 12 13 def set_age(self,age): 14 self.__age=age 15 16 def get_age(self): 17 return self.__age 18 19 def set_salary(self,salary): 20 self.__salary=salary 21 22 def get_salary(self): 23 return self.__salary 24 25 @property 26 def age(self): 27 return self.__age 28 29 @age.setter 30 def age(self,age): 31 self.__age=age 32 33if __name__ == '__main__': 34 p1 = Person('tom',11,1000) 35 print(p1.get_age()) 36 p1.set_age(100) 37 print(p1.get_age()) 38 39 print(p1.age) 40 p1.age = 28 41 print(p1.age) 42 43 #eval()的功能:将字符串str当成有效的表达式来求值并返回计算结果。如下是将字符串转换成方法名再调用: 44 def man(): 45 return "good job" 46 print(eval("man")()) 47 48 #eval()可以把list, tuple, dict和string相互转化,这里以list为示例进行演示: 49 list1 = "[33,2,22,11,44,55]" 50 print(type(list1)) 51 list2 = eval(list1) 52 print(type(list2)) 53 print(list2) 54 print(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自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:
添加关注,让我们一起共同成长!