pImpl用法在Python的示例代码

2024-09-04 22:32

本文主要是介绍pImpl用法在Python的示例代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 简介

pImpl是C++中非常常用的一种设计方法。在《推荐学习C++的一些书籍》一文中推荐了一本书,即《Exceptional C++》,其第四章(编译器防火墙和pimpl惯用法)就专门介绍了pimpl。

在软件测试自动化方面,通常基础库是用C++/C来开发,而上面用脚本语言(如Python)封装成函数。或者基础库用脚本语言的面向对象来开发,但最终提供给用户的是pure function。为什么这样处理呢?主要是降低测试人员对脚本语言的编程技能要求,所以去掉了语言的面向对象部分,而只需要掌握简单的函数使用方法即可。那么在这个过程中,也大量贯穿着pimpl的一些思想。

本文不对pimpl做详细的理论介绍,后面有机会通过C++进行说明。本文重点在于给出python中pimpl的简单示例代码。

——在python安装目录下,可以找到FileInput.py这个文件,该文件也是一个很好的pimpl示例。本文进一步简化,没有复杂的算法,仅聚焦于pimpl的基本思想。再者,我们并没有在两个class之间阐释pimpl,而是在pure function和class之间。可以想到,python中使用pimpl并不是要缩短编译时间(C++则很看重这一点),而是简化用户层代码的调用方法。

2. 示例代码

下面的代码用到了《Head First Design Pattern》开篇的鸭子示例的想法。

"""An example program used to show the pImpl pattern in Python.Typical use is:import animatora = create("Tom")fly(a)jump(a)destroy(a)
"""def create(name):o = Animator(name)return odef fly(animator):animator.fly()def jump(animator):animator.jump()def destroy(animator):passclass Animator(object):def __init__(self, name):self.name = namedef fly(self):print "%s is flying..." % (self.name,)def jump(self):print "%s is jumping..." % (self.name,)def _test():a = create("Tom")b = create("Jerry")fly(a)jump(b)fly(a)jump(b)fly(b)fly(b)jump(a)destroy(a)destroy(b)def _test_class():printprint "test the usage of class..."a = Animator("Tom")b = Animator("Jerry")a.fly()b.jump()a.fly()b.jump()b.fly()b.fly()a.jump()if __name__ == '__main__':_test()_test_class()

3. 运行结果

D:\examples\python\pimpl>python animator.py
Tom is flying...
Jerry is jumping...
Tom is flying...
Jerry is jumping...
Jerry is flying...
Jerry is flying...
Tom is jumping...test the usage of class...
Tom is flying...
Jerry is jumping...
Tom is flying...
Jerry is jumping...
Jerry is flying...
Jerry is flying...
Tom is jumping...D:\examples\python\pimpl>

4. 说明

在示例代码中,我们对用户提供的是4个函数:create(), fly(), jump(), destory(),而不是class Animator。——尽管用户也的确可以直接使用class Animator,如同_test_class()所示。

可以看到,这种方法首先是一个初始化的函数,返回一个对象或ID;后续的函数都会有一个对象或ID作为入参。真正的实现代码,则放在class Animator中。——可以和C语言的文件操作相关的函数进行类比。


这篇关于pImpl用法在Python的示例代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137214

相关文章

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

Python实现剪贴板历史管理器

《Python实现剪贴板历史管理器》在日常工作和编程中,剪贴板是我们使用最频繁的功能之一,本文将介绍如何使用Python和PyQt5开发一个功能强大的剪贴板历史管理器,感兴趣的可以了解下... 目录一、概述:为什么需要剪贴板历史管理二、功能特性全解析2.1 核心功能2.2 增强功能三、效果展示3.1 主界面

Python与Java交互出现乱码的问题解决

《Python与Java交互出现乱码的问题解决》在现代软件开发中,跨语言系统的集成已经成为日常工作的一部分,特别是当Python和Java之间进行交互时,编码问题往往会成为导致数据传输错误、乱码以及难... 目录背景:为什么会出现乱码问题产生的场景解决方案:确保统一的UTF-8编码完整代码示例总结在现代软件

Python+Tkinter实现Windows Hosts文件编辑管理工具

《Python+Tkinter实现WindowsHosts文件编辑管理工具》在日常开发和网络调试或科学上网场景中,Hosts文件修改是每个开发者都绕不开的必修课,本文将完整解析一个基于Python... 目录一、前言:为什么我们需要专业的Hosts管理工具二、工具核心功能全景图2.1 基础功能模块2.2 进

Python多重继承慎用的地方

《Python多重继承慎用的地方》多重继承也可能导致一些问题,本文主要介绍了Python多重继承慎用的地方,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录前言多重继承要慎用Mixin模式最后前言在python中,多重继承是一种强大的功能,它允许一个

python+OpenCV反投影图像的实现示例详解

《python+OpenCV反投影图像的实现示例详解》:本文主要介绍python+OpenCV反投影图像的实现示例详解,本文通过实例代码图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前言二、什么是反投影图像三、反投影图像的概念四、反向投影的工作原理一、利用反向投影backproj

Python中edge-tts实现便捷语音合成

《Python中edge-tts实现便捷语音合成》edge-tts是一个功能强大的Python库,支持多种语言和声音选项,本文主要介绍了Python中edge-tts实现便捷语音合成,具有一定的参考价... 目录安装与环境设置文本转语音查找音色更改语音参数生成音频与字幕总结edge-tts 是一个功能强大的

使用Python和PaddleOCR实现图文识别的代码和步骤

《使用Python和PaddleOCR实现图文识别的代码和步骤》在当今数字化时代,图文识别技术的应用越来越广泛,如文档数字化、信息提取等,PaddleOCR是百度开源的一款强大的OCR工具包,它集成了... 目录一、引言二、环境准备2.1 安装 python2.2 安装 PaddlePaddle2.3 安装

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

Python datetime 模块概述及应用场景

《Pythondatetime模块概述及应用场景》Python的datetime模块是标准库中用于处理日期和时间的核心模块,本文给大家介绍Pythondatetime模块概述及应用场景,感兴趣的朋... 目录一、python datetime 模块概述二、datetime 模块核心类解析三、日期时间格式化与