软件测试|Python基础之面向对象(一)

简介: 软件测试|Python基础之面向对象(一)

面向对象

面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。

面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。

这个定义比较抽象,我们通过举一个示例来说一下面向对象的思想。

人狗大战

  1. 需求
  • 用代码模拟人、狗打架的小游戏
  • 人和狗种类不同,因此双方的属性各不相同

思考一:

  • 人和狗各有不同属性
  • 使用字典方式储存属性较为方便,并可储存多种属性

根据上述思考,初步构思出来的代码如下

# 1、在字典内储存‘人’属性
person = {
     'name': '阿拉蕾',
     'age': 18,
     'gender': '女',
     'p_type': '战士',
     'attack_val': 8000,
     'life_val': 99999999
 }

# 2、在字典内储存‘狗’特有属性
 dog1 = {
     'name': '小黑',
     'd_type': '泰迪',
     'attack_val': 100,
     'life_val': 8000
 }

思考二:

  • 按照上述方法,如果想要定义多个‘人’和‘狗’就需要反复设置多个字典,这样非常麻烦且费时
  • 这时可推导出,想要快速、便捷的定义多个‘人’和‘狗’,那么我们可以把字典内的数据封装在函数内,利用传参的方式,这样可以较为方便的生成多个‘人’和‘狗’,只需要使用不同变量名调用函数时传不同的参数即可

优化后的代码如下:

# 1、封装‘人’属性函数
def create_person(name, age, gender, p_type, attack_val, life_val):
    person_dict = {
        'name': name,
        'age': age,
        'gender': gender,
        'p_type': p_type,
        'attack_val': attack_val,
        'life_val': life_val
    }
    return person_dict


# 2、封装‘狗’属性的函数
def create_dog(name, d_type, attack_val, life_val):
    dog_dict = {
        'name': name,
        'd_type': d_type,
        'attack_val': attack_val,
        'life_val': life_val
    }
    return dog_dict


# 3、生成多个‘人’和‘狗’
p1 = create_person('阿拉蕾', 18, '男', '战士', 8000, 99999999)
p2 = create_person('小朵朵', 28, '女', '法师', 100, 800)

d1 = create_dog('小黑', '泰迪', 100, 8000)
d2 = create_dog('小白', '斗牛', 100, 800000)

思考三:

  • ‘人’和‘狗’就类似于各自不同种类的对象
  • 说到这里,我们就应该明白,‘人’和‘狗’因为种类不同,所以双方的属性也各不相同,也就是说不同的对象,属性(数据)各不相同
  • 当多个对象的属性生成后,我们就要开始定义彼此打架的动作(功能)

    • 人打狗的动作(脚踢)
    • 狗咬人的动作
# 1、人打狗的动作
def person_attack(person_dict, dog_dict):
    print(f"{person_dict.get('name')}踢向{dog_dict.get('name')}")
    dog_dict['life_val'] -= person_dict.get('attack_val')
    print(f"人踢了狗一脚 狗掉血:{person_dict.get('attack_val')} 狗剩余血量:{dog_dict.get('life_val')}")
    
# 2、狗打人的动作
def dog_attack(dog_dict, person_dict):
    print(f"{dog_dict.get('name')}向{person_dict.get('name')}咬去")
    person_dict['life_val'] -= dog_dict.get('attack_val')
    print(f"狗咬了人一口 人掉血:{dog_dict.get('attack_val')} 人剩余血量:{person_dict.get('life_val')}")

# 3、调用双方各自的函数,即可模拟出双方打架的动作
person_attack(p1, d1)  # 人打狗
dog_attack(d2, p2)  # 狗咬人
-------------------------------------------------------
阿拉蕾踢向小黑
人踢了狗一脚 狗掉血:8000 狗剩余血量:0
小白向小朵朵咬去
狗咬了人一口 人掉血:100 人剩余血量:700
  1. 核心思路
  • ‘人’和‘狗’就是不同的对象

    • 通过将不同的属性封装在不同的函数内,就可以通过相同的函数快速生成不同属性的对象
  • ‘人’和‘狗’打架的方式就是对象的功能

    • 人的打架方式是踢,狗的打架方式是咬,也就是说不同的类有着不同的功能,而相同的类就可以有着彼此相同的功能

需求:

  • 以上我们完成了不同种类的打架方式,但是在python中,如果没有特别的限制,我们就可以把人攻击的数据传在狗攻击函数内,这样就会产生混乱,要如何实现下列需求

    • ‘人’只能调用人的攻击方式
    • ‘狗’只能调用狗的攻击方式

优化一:

"""推导步骤4:如何实现只有人只能调用的人的攻击动作  狗只能调用狗的攻击动作>>>:数据与功能的绑定"""
def get_person(name, age, gender, p_type, attack_val, life_val):
    # 产生人的函数(功能)
     def person_attack(person_dict, dog_dict):
        print(f"{person_dict.get('name')}踢向{dog_dict.get('name')}")
        dog_dict['life_val'] -= person_dict.get('attack_val')
        print(f"人踢了狗一脚 狗掉血:{person_dict.get('attack_val')} 狗剩余血量:{dog_dict.get('life_val')}")
    # 表示人的信息(数据)
    person_dict = {
        'name': name,
        'age': age,
        'gender': gender,
        'p_type': p_type,
        'attack_val': attack_val,
        'life_val': life_val,
        'person_attack': person_attack
    }
    return person_dict


def get_dog(name, d_type, attack_val, life_val):
    def dog_attack(dog_dict, person_dict):
        print(f"{dog_dict.get('name')}向{person_dict.get('name')}咬去")
        person_dict['life_val'] -= dog_dict.get('attack_val')
        print(f"狗咬了人一口 人掉血:{dog_dict.get('attack_val')} 人剩余血量:{person_dict.get('life_val')}")
    dog_dict = {
        'name': name,
        'd_type': d_type,
        'attack_val': attack_val,
        'life_val': life_val,
        'dog_attack': dog_attack
    }
    return dog_dict


person1 = get_person('jason', 18, 'male', '猛男', 8000, 99999999)
dog1 = get_dog('小黑', '恶霸', 800, 900000)
person1.get('person_attack')(person1, dog1)

结论:

  • 通过上列代码,我们将人的专属攻击方式,封装在了人的类别内,实现了人专属的属性和功能,当人在调用自身类别,并传入符合条件的参数时,就可以生成一个人(对象)特有的属性(数据)和攻击方式(功能)
  • 同上,我们也可将狗的数据和攻击方式封装在狗特有的函数内,当我们生成多条狗的时候,每条狗也就有了,狗(对象)特有的属性(数据)和攻击方式(功能)
人狗大战推导就是面对对象的核心思想:数据与功能的绑定
相关文章
|
1月前
|
Python
Python中 If语句条件测试
Python中 If语句条件测试
20 1
|
1月前
|
Python
python-面向对象
python-面向对象
15 2
|
5天前
|
Web App开发 测试技术 网络安全
|
10天前
|
JSON 测试技术 持续交付
自动化测试与脚本编写:Python实践指南
【4月更文挑战第9天】本文探讨了Python在自动化测试中的应用,强调其作为热门选择的原因。Python拥有丰富的测试框架(如unittest、pytest、nose)以支持自动化测试,简化测试用例的编写与维护。示例展示了使用unittest进行单元测试的基本步骤。此外,Python还适用于集成测试、系统测试等,提供模拟外部系统行为的工具。在脚本编写实践中,Python的灵活语法和强大库(如os、shutil、sqlite3、json)助力执行复杂测试任务。同时,Python支持并发、分布式执行及与Jenkins、Travis CI等持续集成工具的集成,提升测试效率和质量。
|
13天前
|
监控 物联网 Linux
python测试串口最大通信速率
【4月更文挑战第5天】
|
14天前
|
jenkins 测试技术 持续交付
软件测试|docker搭建Jenkins+Python+allure自动化测试环境
通过以上步骤,你可以在Docker中搭建起Jenkins自动化测试环境,实现Python测试的自动化执行和Allure报告生成。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
34 6
|
1月前
|
Java 程序员 数据安全/隐私保护
Python教程第6章 | Python面向对象
Python面向对象概念、类的定义和调用、类方法、修改和增加类属性、类和对象、初始化函数、类的继承、类的多态、类的访问控制
40 0
|
1月前
|
Python
|
2月前
|
测试技术 Python
Python中的单元测试与测试驱动开发(TDD)实践
Python中的单元测试与测试驱动开发(TDD)实践
|
2月前
|
监控 测试技术 API
自动化测试工具与电脑桌面监控软件的集成:Selenium与Python的无缝整合
在当今数字化时代,软件质量保证是每个软件开发团队都必须面对的重要挑战之一。自动化测试工具和电脑桌面监控软件的结合,为开发团队提供了一种有效的方式来确保软件的稳定性和性能。本文将介绍如何利用Python编程语言中的Selenium库,与桌面监控软件进行无缝整合,以实现对应用程序的自动化测试和桌面监控。
184 5

热门文章

最新文章