首页 > 编程语言 >软件测试|探索多态在程序设计中的奇妙应用与巧妙技巧!

软件测试|探索多态在程序设计中的奇妙应用与巧妙技巧!

时间:2024-01-30 11:34:50浏览次数:37  
标签:__ doctor Father 多态 needDoctor print 程序设计 class 软件测试

测试管理班是专门面向测试与质量管理人员的一门课程,通过提升从业人员的团队管理、项目管理、绩效管理、沟通管理等方面的能力,使测试管理人员可以更好的带领团队、项目以及公司获得更快的成长。提供 1v1 私教指导,BAT 级别的测试管理大咖量身打造职业规划。

多态是面向对象编程中三大概念之三,它允许不同的对象对同一个消息作出不同的响应。

简单来说,多态是指同一个方法或操作符在不同的对象实例上可以有不同的行为。这意味着可以通过一个共同的接口或基类引用不同的子类对象,并根据实际的对象类型来调用相应的方法。

多态性在实际应用中提供了很多好处,包括:

  1. 简化代码:通过以相同的方式处理不同的对象,并使用统一的接口进行编程,可以降低代码的复杂性和重复性。
  2. 可维护性:多态可以提高代码的可维护性。当需要新增一种子类时,不需要修改已有的代码,只需要创建一个新的子类并继承父类,就能够在原有的代码基础上实现新的功能。
  3. 扩展性:由于多态允许在不修改已有的代码的情况下新增功能,因此可以更容易地对系统进行扩展和适应需求的变化。

多态性的实现通常通过继承和方法重写来实现。在继承关系中,子类可以重写父类的方法,在父类引用子类对象时,调用的实际上是子类重写后的方法。



# 中医
class Father:    
    def cure(self):        
        print("使用中医方法进行治疗。。。")
# 西医
class Son(Father):    
    def cure(self):        
        print("使用西医方法进行治疗。。。")

# 患者
class Patient:    
    def needDoctor(self, doctor):        
        doctor.cure()

if __name__ == '__main__':    
    oldDoctor = Father()    
    littleDoctor = Son()
    patient = Patient()
    patient.needDoctor(oldDoctor)    
    patient.needDoctor(littleDoctor)

鸭子类型

鸭子类型(Duck Typing)是一种动态类型的概念,它源自于“走起来像鸭子、叫声像鸭子、看起来像鸭子,那么它就是鸭子”的观念。

在鸭子类型中,一个对象的适用性不是由它的类或接口决定,而是由它的方法和属性是否与所需的方法和属性匹配来决定。换句话说,只要一个对象具有特定方法和属性,我们就可以将其视为具有相同类型。

举个例子,如果我们需要一个能“叫”的对象,并且某个对象有一个名为quack()的方法,那么我们可以将该对象视为一个“鸭子”,不管它实际上是什么类的对象。换句话说,我们关注的是对象的行为而不是其类型。

鸭子类型在动态语言中特别常见,比如 Python。在 Python 中,不需要显式地继承或实现接口,只要一个对象具有必需的方法和属性,它就可以被认为是某种类型。这使得 Python 具有灵活性和简洁性,可以更自由地处理不同类型的对象。



# 中医
class Father:    
    def cure(self):        
        print("使用中医方法进行治疗。。。")
# 西医
class Son(Father):    
    def cure(self):        
        print("使用西医方法进行治疗。。。")
# 兽医
class AnimalDoctor:    
    def cure(self):        
        print("使用兽医方法进行治疗。。。")
# 患者
class Patient:    
    def needDoctor(self, doctor):        
        doctor.cure()

if __name__ == '__main__':    
    oldDoctor = Father()    
    littleDoctor = Son()    
    animalDoctor = AnimalDoctor()
    
    patient = Patient()
    patient.needDoctor(oldDoctor)    
    patient.needDoctor(littleDoctor)    
    patient.needDoctor(animalDoctor)

鸭子类型通常是动态语言的特性,相比于静态类型语言,它在编译时没有类型检查。这意味着无法在编译阶段对类型不匹配或缺失方法和属性进行检测,可能会导致运行时错误。

类型检查

Python 中提供了 isinstance()issubclass() 两个函数,用来对数据进行检查判断。

isinstance()

Python 中使用 isinstance() 来检查一个实例的类型

格式:

isinstance(obj, type)

判断 obj 对象是否是 Type 指定类型或其父类类型的实例。

   print(isinstance(littleDoctor, Father))    
   print(isinstance(littleDoctor, Son))    
   print(isinstance(littleDoctor, AnimalDoctor))

前面示例的代码可以进行优化:



# 患者
class Patient:    
    def needDoctor(self, doctor):        
        if isinstance(doctor, Father):            
            doctor.cure()        
        else:            
            print("此大夫医疗方法不适用病人。。。")

issubclass()

Python 中还可以使用 issubclass() 来检查类的继承关系。

格式:

issubclass(Type1, Type2)

判断 Type1 是否是 Type2 的子类

   print(issubclass(Father, Father))    
   print(issubclass(Son, Father))    
   print(issubclass(AnimalDoctor, Father))

前面的示例也可优化为:

class Patient:    
    def needDoctor(self, doctor):        
    if issubclass(doctor.__class__, Father):            
        doctor.cure()        
    else:            
        print("此大夫医疗方法不适用病人。。。")

__class__ 是一个魔法属性,用来获取当前实例对象的类。

标签:__,doctor,Father,多态,needDoctor,print,程序设计,class,软件测试
From: https://www.cnblogs.com/hogwarts/p/17996749

相关文章

  • C++多态
    多态的概念多态(Polymorphism)是面向对象编程中的一个重要概念,它允许同一类型的对象在不同的上下文中表现出不同的行为。多态性有两种主要形式:编译时多态(静态多态性)和运行时多态(动态多态性)。编译时多态可以看成是函数重载和运算符重载,之前的文章已经涉及过,不再赘述;所以,下面所提到的多......
  • 软件测试岗位发展编年史
    最近有同学私信我说,越来越觉得自己跟不上时代了,面试问的问题以及涉及的知识点很多都没接触过,是不是纯粹的软件测试工作快消失了。我问他有哪些擅长的技能,他如此回答道:需求分析、设计用例、抓包分析、维护更新自动化用例、提交跟踪BUG,写测试报告。我一看,这不就是测试日常工作中大......
  • 《实战Java高并发程序设计(第2版)》PDF
    内容简介在单核CPU时代,单任务在一个时间点只能执行单一程序,随着多核CPU的发展,并行程序开发变得尤为重要。《实战Java高并发程序设计(第2版)》主要介绍基于Java的并行程序设计基础、思路、方法和实战。第一,立足于并发程序基础,详细介绍Java进行并行程序设计的基本方法。第二,进一步详细......
  • 软件测试|京东科技控股股份有限公司岗位开放~
    测试开发工程师岗位职责1、参与项目测试全流程,根据产品需求和研发设计进行需求分析和风险评估,制定测试计划,设计并执行测试用例,进行缺陷定位和跟踪修复,保障项目质量;2、项目测试环境和线上环境自动化部署工具的开发和维护;3、自动化测试工具的开发和维护,提升测试效率;4、系统或业......
  • 软件测试学习笔记丨Charles_Mock实战
    Charles_Mock实战1.电脑端抓包抓取雪球Web端搜索接口数据查看接口响应状态码与使用的协议版本查看请求参数与json格式的响应内容快速过滤雪球域名的接口进行弱网测试,选择弱网模式为256kbpsProxy→ThrottleSetting,然后选择EnableThrottling弱网前弱网后2.App抓包抓取......
  • 程序设计语言
    1.程序设计语言的基本概念低级语言:汇编语言。高级语言:Java、C、C++、Python等。翻译形式:汇编、解释、编译。定义:语法、语义、语用。分类:过程式(命令式和结构化):C、Pascal等等。面向对象:Java、C++、Smalltalk、Python等等。函数......
  • 面相对象之多态和鸭子类型
    面相对象之多态和鸭子类型多态指的是一类事物有多种形态一、多态动态绑定(多态性)多态动态绑定在继承的背景下使用时,有时也称为多态性多态性是指在不考虑实例类型的情况下使用实例在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息不同的对象在接收......
  • 每日(软件测试分类)
    (一)软件测试的定义在规定的条件下对程序进行操作,以发现程序的错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。1规定条件-->测试用例2发现程序的错误-->找bug3衡量软件质量-->根据各项指标评估软件的质量4满足设计要求-->是否满足用户需求、需求规格说明书......
  • 每日(软件测试模型)
    (三)软件测试的原则1、测试应该尽早进行,最好在需求阶段就开始介入,因为最严重的错误不外乎是系统不能满足用户的需求。2、程序员(开发)应该避免检查自己的程序,软件测试应该由第三方(测试人员)来负责。3、设计测试用例时应考虑到合法的输入和不合法的输入。4、在测试程序时,不仅要检验程......
  • 每日(软件测试生命周期)
     什么是生命周期?“生命周期”这个简单的词是指从一个形式(状态)到另外一个形式(状态)的一系列的变化。这些变化可以发生有形或无形的事情上。每个实体都有生命周期,从开始到死亡/结束。类似的,软件也是个实体。就像开发软件包括一系列的步骤,测试也有很多步骤,这些步骤按照一定顺序去......