纯干货——Python自动化测试的动态属性

Python动态属性的概念可能会被面试问到,在项目当中也非常实用,但是在一般的编程教程中不会提到,可以进修一下。

先看一个简单的例子。

创建一个Student类,我希望通过实例来获取每个学生的一些情况,包括名字,成绩等。

成绩只有等到考试结束以后才会有,所以实例化的时候不会给它赋值。
在这里插入图片描述
考试完以后,准备给mike打分:
在这里插入图片描述
在这里,老师一不小心多打了个 9 ,通常来说打分都是 100 分值,999 是一个非法数据,不应该赋值成功。

学生一多,老师打分出现手误的情况肯定会越来越多,所以我们必须想办法修改程序,限制 score 的值必须在 0-100 分。

1、限制值

我们定义一个方法,如果输入的不是 0-100 的整数,就让程序报错,数据合法,我们就把 score 属性修改成功。在这里插入图片描述
这样我们每次需要获取成绩的时候使用 self.score 获取。

修改成绩的时候调用函数来修改:在这里插入图片描述
调用以后会报错,因为999是非法数据。

注意,这个时候我使用 self.score 还是可以进行设置,而且不报错:在这里插入图片描述
这显然是不行的。

所以我们要提供一种机制,把 score 变成私有属性,不能让外部访问。

很遗憾,python的私有属性是伪私有。

通常我们把 _ 开头的属性叫私有属性,但是这只是一种协议和规定,你看到下划线开头的属性,不要去访问了。

你硬要访问,是可以的,python 并不会禁止。

2、使用@property的方式代替

上面的方法虽然实现了功能,但是改变了属性的使用方式。

平常是这样使用的:在这里插入图片描述
3、动态属性的好处

统一了调用方式。
self.score = 99 的方式,而不是函数调用的方式。
_score 我们就不直接去使用了。
你要用也可以,不建议。
如果我们一个属性只可以读,把setter部分注释掉就可以了。
现在我们来完善这个类,添加birth属性和年龄属性:在这里插入图片描述
birth和age这两个是可以根据一个求出另外一个的。

存在数据冗余问题。

age属性这样是有问题的。

mike初始化的时候,age已经被求出来了,如果我在下一年再去访问 age 属性,那他就是个错误的值。

可以通过把age设成现在的秒数来验证:在这里插入图片描述
4、动态显示
在这里插入图片描述

注意,这里不要去设置 @age.setter ,因为他是动态变化的,你修改了会造成数据不一致,它只能作为一个只读属性。

@property作用和应用场景:

◆ @property 优化了属性读取和设置的可读性

◆ 需要限制属性的特征;

◆ 只读属性。如果属性只可以读,不可以写,用起来很方便。

◆ 这个属性根据一个变化的环境动态改变。

如果对软件测试有兴趣,想了解更多的测试知识,解决测试问题,以及入门指导,帮你解决测试中遇到的困惑,我们这里有技术高手。如果你正在找工作或者刚刚学校出来,又或者已经工作但是经常觉得难点很多,觉得自己测试方面学的不够精想要继续学习的,想转行怕学不会的, 都可以加入我们**在这里插入图片描述
**,群内可领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值