第6章:Python TDD实例变量私有化探索
写在前面
这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许优质的单元测试是一个切入点。 就我个人而言,这本书确实很有帮助。第一次读的时候,很多细节我都不太懂,但将书中内容应用到工作中后,我受益匪浅。比如面对一些让人抓狂的代码设计时,书里的方法能让我逐步深入理解代码的逻辑与设计。 作为一名测试开发工程师,我想把学习这本书的经验分享给大家,希望能给大家带来帮助。因为现在工作中大多使用 Python 代码,所以我把书中JAVA案例都用 Python 代码进行了改写 。
问题背景说明
在面向对象编程中,对类的实例变量进行合理的访问控制是提高代码安全性和稳定性的重要手段。对于Dollar类的金额变量,如果直接暴露给外部随意访问和修改,可能会导致数据的不一致性和错误操作。通过探索实例变量私有化,限制外部对关键数据的直接操作,仅提供安全的访问接口,能够更好地保护数据的完整性,提升代码的健壮性。
在Python TDD开发中,合理管理实例变量的访问权限可以提高代码的安全性和稳定性。对于Dollar类的实例变量,我们尝试进行私有化操作。
6.1 思路说明
Python中没有像其他语言那样严格的私有变量定义方式,但可以通过约定俗成的方式(如在变量名前加下划线)来模拟私有变量。对Dollar类的金额变量进行私有化处理,同时提供访问和修改该变量的方法,以保证外部代码只能通过特定的接口来操作实例变量,增强代码的封装性。
6.2 测试代码
import unittestclass Dollar:def __init__(self, amount):self._amount = amountdef times(self, multiplier):return Dollar(self._amount * multiplier)def get_amount(self):return self._amountclass TestDollar(unittest.TestCase):def test_dollar_multiplication(self):five = Dollar(5)product = five.times(2)self.assertEqual(product.get_amount(), 10)if __name__ == '__main__':unittest.main()
6.3 源码说明
在Dollar类中,我们将金额变量命名为_amount,使用单下划线表示这是一个“私有”变量,虽然在Python中不能完全阻止外部访问,但能起到一定的提示作用。times方法在进行乘法运算时使用的是_amount变量,确保内部运算的正确性。get_amount方法用于提供外部获取_amount变量值的接口。在测试用例test_dollar_multiplication中,创建了金额为5的Dollar对象five,调用times方法进行乘法运算后,通过get_amount方法获取结果并与预期值10进行比较,验证times方法和get_amount方法的正确性。
相关文章:
第6章:Python TDD实例变量私有化探索
写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...
Java操作Excel导入导出——POI、Hutool、EasyExcel
目录 一、POI导入导出 1.数据库导出为Excel文件 2.将Excel文件导入到数据库中 二、Hutool导入导出 1.数据库导出为Excel文件——属性名是列名 2.数据库导出为Excel文件——列名起别名 3.从Excel文件导入数据到数据库——属性名是列名 4.从Excel文件导入数据到数据库…...
BUUCTF_Web([GYCTF2020]Ezsqli)
1.输入1 ,正常回显。 2.输入1 ,报错false,为字符型注入,单引号闭合。 原因: https://mp.csdn.net/mp_blog/creation/editor/145170456 3.尝试查询字段,回显位置,数据库,都是这个。…...
微软宣布Win11 24H2进入新阶段!设备将自动下载更新
快科技1月19日消息,微软于1月16日更新了支持文档,宣布Windows 11 24H2进入新阶段。 24H2更新于2024年10月1日发布,此前为可选升级,如今微软开始在兼容的Windows 11设备上自动下载并安装24H2版本。 微软表示:“运行Wi…...
SpringBoot:解决前后端请求跨域问题(详细教程)
文章目录 一、前言二、解决方式 2.1 使用 CrossOrigin 注解(简单方便,适用于单个或少量接口)2.2 全局配置跨域(适用于整个项目中大量接口都需要跨域的情况)2.3 使用过滤器来处理跨域(更底层的实现方式&…...
Android-V lmkd 中的那些属性值
源码基于:Android V 相关博文: Android lmkd 机制详解(一) Android lmkd 机制详解(二) Android lmkd 机制从R到T 1. 汇总 属性名说明默认值 ro.lmk.debug 启动 lmkd 的debug 模式,会打印一…...
PageHelper快速使用
依赖 <!--分页插件PageHelper--> <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.7</version> </dependency>示例 /** * 封装分页结果…...
图像处理基础(3):均值滤波器及其变种
均值滤波器可以归为低通滤波器,是一种线性滤波器,其输出为邻域模板内的像素的简单平均值,主要用于图像的模糊和降噪。 均值滤波器的概念非常的直观,使用滤波器窗口内的像素的平均灰度值代替图像中的像素值,这样的结果就…...
力扣刷题心得_JAVA
数学 > 数组 > 链表 > 字符串 > 哈希表 > 双指针 > 递归 > 栈 > 队列 > 树 //一般力扣中传入的参数和新建的对象作为返回值,都不列入空间复杂度中 //但是面试的时候要和面试官商量好,灵活定义空间复杂度 //当然最好是就在传入的对象作为返回值,(在原…...
音乐播放器实现:前端HTML,CSS,JavaScript综合大项目
音乐播放器实现:前端HTML,CSS,JavaScript综合大项目 项目概述项目视图效果一、侧边栏相关代码(一)HTML代码(二)css代码 二、登录页面(一)HTML代码(二)css代码…...
Unity编辑器缩放设置
Unity默认界面UI字体太小了,可以设置一下缩放 打开首选项, UI Scaling 设置成125%或者更大 ,然后重启...
ChatGPT大模型极简应用开发-CH1-初识 GPT-4 和 ChatGPT
文章目录 1.1 LLM 概述1.1.1 语言模型和NLP基础1.1.2 Transformer及在LLM中的作用1.1.3 解密 GPT 模型的标记化和预测步骤 1.2 GPT 模型简史:从 GPT-1 到 GPT-41.2.1 GPT11.2.2 GPT21.2.3 GPT-31.2.4 从 GPT-3 到 InstructGPT1.2.5 GPT-3.5、Codex 和 ChatGPT1.2.6 …...
Golang学习笔记_27——单例模式
Golang学习笔记_24——泛型 Golang学习笔记_25——协程Golang学习笔记_25——协程 Golang学习笔记_26——通道 文章目录 单例模式1. 介绍2. 应用场景3. 实现3.1 饿汉式3.2 懒汉模式 源码 单例模式 1. 介绍 单例模式是一种创建型设计模式,它确保一个类只有一个实例…...
хорошо哈拉少wordpress俄语主题
хорошо哈拉少wordpress俄语主题 wordpress俄文网站模板,推荐做俄罗斯市场的外贸公司建俄语独立站使用。 演示 https://www.jianzhanpress.com/?p7360...
[数据结构与算法]js实现二叉树
DFS 与 BFS dfs 递归 本质通过栈结构 bfs 层序遍历 通过队列结构 function permute(nums) {let res [];let cur []; // 记录当前内容let visted {}; //记录访问过的节点let len nums.length;function dfs(nth) {//递归终止条件if (nth len) {res.push([...cur]);return …...
MySQL程序之:连接到服务器的命令选项
本节介绍大多数MySQL客户端程序支持的选项,这些选项控制客户端程序如何建立与服务器的连接、连接是否加密以及连接是否压缩。这些选项可以在命令行或选项文件中给出。 连接建立的命令选项 本节介绍控制客户端程序如何建立与服务器的连接的选项。 表6.4连接建立选…...
python3GUI--仿崩坏三二次元登录页面(附下载地址) By:PyQt5
文章目录 一.前言二.预览三.实现方案1.实现原理1.PyQt52. 具体实现 2.UI设计1.UI组件化、模块化2.UI设计风格思路 3.项目代码结构4.使用方法3.代码分享1.支持跳转网页的QLabel组件2.三角形ICON按钮 四.总结 大小:33.3 …...
阿里云 Serverless 助力盟主直播:高并发下的稳定性和成本优化
在直播场景中,阿里云 Serverless 应用引擎 SAE 提供的无缝弹性伸缩与极速部署能力,确保直播间高并发时的流畅体验,降低了我们的运营成本,简化了运维流程。结合阿里云云原生数据库 PolarDB 的 Serverless 能力,实现了数…...
Unity 学习指南与资料分享
Unity学习资料 Unity学习资料 Unity学习资料 Unity 作为一款强大的跨平台游戏开发引擎,在游戏开发及实时 3D 内容创作领域占据着重要地位。它功能丰富、易于上手,支持多平台发布,为开发者提供了广阔的创作空间。下面为你带来全面的 Unity 学…...
Android SystemUI——CarSystemBar视图解析(十一)
前面文章我们已经把 CarSystemBar 从启动到构建视图,再到将视图添加到 Window 的流程分析完毕,我们知道默认情况下在车载系统中只显示顶部栏和底部栏视图的。这里我们在前面文章的基础上以顶部栏为例具体解析其视图的结构。 一、顶部栏解析 通过《CarSystemBar车载状态栏》这…...
005、轻量化改进(三):模型量化(INT8/FP16)与部署加速
上周在产线调试YOLO检测模型时遇到这么个情况:模型在RTX 4090上跑得飞快,帧率轻松过百,但一到产线的Jetson Orin Nano边缘设备上,帧率直接掉到15帧,还时不时内存告警。产线主管盯着监控画面皱眉:“这延迟&a…...
收藏!小白程序员快速入门大模型:23个核心概念轻松掌握
本文介绍了23个AI领域最常见的核心概念和术语,旨在帮助普通人与AI工具更好地打交道。文章从人工智能的基本定义出发,详细解释了机器学习、深度学习、神经网络、生成式AI、大语言模型等核心概念,并拓展了模型、训练、推理、幻觉等关键技术方法…...
LS-PrePost后处理技巧:如何让你的小球打靶仿真结果更直观
LS-PrePost后处理高阶技巧:让小球打靶仿真结果跃然屏上 仿真工程师们常说:"前处理是体力活,后处理才是艺术。"这句话在小球打靶这类显式动力学仿真中尤为贴切。当你在LS-DYNA中完成了复杂的计算后,如何通过LS-PrePost将…...
Pygame 实战(单机版桌游模拟):(一). 游戏设计与规则解析
1. 为什么选择Pygame开发桌游模拟器 作为一个玩了十几年桌游的老玩家,我一直想把那些经典的桌面游戏搬到电脑上。去年开始接触Pygame后,发现这个框架简直就是为桌游模拟量身定制的。它轻量级、易上手,最重要的是完全免费开源。我用它做过狼人…...
突破限制!OBS虚拟摄像头插件实现4路视频同时分发终极方案
突破限制!OBS虚拟摄像头插件实现4路视频同时分发终极方案 【免费下载链接】obs-virtual-cam 项目地址: https://gitcode.com/gh_mirrors/obsv/obs-virtual-cam 你是否曾经遇到过这样的困扰?当你使用OBS进行直播或录制时,想要将画面同…...
DeOldify作品画廊:从黑白到彩色的历史瞬间重现
DeOldify作品画廊:从黑白到彩色的历史瞬间重现 你有没有想过,那些尘封在历史档案里的黑白照片,如果有了色彩,会是什么样子?那些我们只在书本上读到的场景,那些只存在于长辈记忆中的面孔,如果能…...
Meta-Llama-3-8B-Instruct开箱即用:小白也能5分钟搭建AI对话应用
Meta-Llama-3-8B-Instruct开箱即用:小白也能5分钟搭建AI对话应用 1. 引言:为什么选择Meta-Llama-3-8B-Instruct? 如果你正在寻找一个既强大又容易上手的AI对话模型,Meta-Llama-3-8B-Instruct绝对值得考虑。这个80亿参数的模型在…...
Omni-Vision Sanctuary前端交互设计:基于Web的实时图像生成演示系统
Omni-Vision Sanctuary前端交互设计:基于Web的实时图像生成演示系统 1. 项目背景与核心价值 想象一下这样的场景:设计师需要快速生成产品概念图,营销团队等待社交媒体配图,而开发人员正在调试AI模型的参数。传统工作流程中&…...
Hunyuan-MT Pro多语言落地:支持阿拉伯语从右向左排版+Unicode特殊字符处理
Hunyuan-MT Pro多语言落地:支持阿拉伯语从右向左排版Unicode特殊字符处理 1. 项目概述 Hunyuan-MT Pro是一个基于腾讯混元(Hunyuan-MT-7B)开源模型构建的现代化翻译Web终端。它结合了Streamlit的便捷交互与混元模型强大的多语言理解能力&am…...
Qwen3.5-4B-Claude-Opus实际作品:安全合规GDPR条款技术映射
Qwen3.5-4B-Claude-Opus实际作品:安全合规GDPR条款技术映射 1. 模型介绍 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是基于Qwen3.5-4B的推理蒸馏模型,特别强化了结构化分析、分步骤回答以及处理代码与逻辑类问题的能力。该版本以GGUF量化形…...
