property的作用
众所周知property是一个装饰器,这里不讲装饰器的概念,说一下property的特点:
- 可以将类方法转换为只读属性
- 可以重新实现一个属性的setter和getter方法
property的使用
1 | # coding: utf8 |
运行一下,结果
如上代码,定义一个学生类,包含了sex和age方法,正常来说实例化之后需要 S.sex(), S.age()来引用,而这边因为加上了装饰器property,使得这边可以像Java中一样,直接S.age, S.sex来使用。当然,因为没赋值,打印出来都是None。
getter和setter
上面的代码,某种意义上来说,如此调用,可以看做是python中的”getter”了。
尝试一下,紧接上面代码,将age赋值为11。
1 | S.age = 11 |
结果
报错了,AttributeError: can’t set attribute,说明还不具备set属性。那么参考Java,有没有办法直接赋值呢?
有的,那就是setter装饰符号。代码如下:
1 | # coding: utf8 |
运行一下,结果:
如代码所示,定义了age方法,使用property进行了装饰,那么就可以使用age.setter装饰符,得到跟Java中setter一样的方法。修改后的代码,直接赋值并未报错,打印也显示了。
延伸
property和setter的作用大家已经看到了,那么在实际使用中有什么意义呢?
首先,使用装饰器的优点之一就是:不需要对原方法进行修改。
另外,就是我们可以使用这样的方式来定义集合。在uiautomation-f6项目中,已经体现了。
截取部分。在接口自动化里,每个workflow开头都会定义一个result,这个result可看做是一个属性集合,里面包含了用例执行结果,执行时间,执行消息等。
所以在我们实际写workflow的时候,就方便多了,首先定义一个result,然后人为去判断用例执行的结果,使用 result.success = True来往结果集里塞值,而在分析结果集的地方,只需要接收这个result, 然后使用诸如result.success的方式来获取想要的属性,后期添加属性也省事。
回列表