当前位置: 首页 > news >正文

软件测试基础十四(python 类与对象)

类与对象的意义

  1. 面向对象编程的基础
    • 模拟现实世界:在Python中,类和对象是面向对象编程(OOP)的核心概念。类就像是制造对象的蓝图或者模板,它定义了对象的属性(数据成员)和方法(函数成员)。例如,我们可以定义一个Car类来模拟汽车:
class Car:def __init__(self, brand, model, year):self.brand = brandself.model = modelself.year = yeardef start_engine(self):print(f"{self.brand} {self.model}的发动机启动了。")
      • 这里的Car类有三个属性(brandmodelyear)和一个方法(start_engine)。__init__是一个特殊的方法,用于初始化对象的属性。
    • 对象是类的实例化:对象是根据类创建出来的具体实例,就像根据汽车蓝图制造出的实际汽车。我们可以通过以下方式创建Car类的对象:
my_car = Car("Toyota", "Corolla", 2022)
my_car.start_engine()
      • 这里my_carCar类的一个对象,它有自己的品牌、型号和生产年份属性,并且可以调用start_engine方法来模拟发动机启动。这种方式使得代码能够更贴近现实世界的概念,方便对复杂的实体进行建模。
  1. 代码组织和复用
    • 封装数据和行为:类将数据(属性)和操作数据的函数(方法)封装在一起,使得代码更加模块化。例如,对于一个银行账户类BankAccount,可以将账户余额、账户号码等数据和存款、取款等操作封装在一个类中:
class BankAccount:def __init__(self, account_number, balance):self.account_number = account_numberself.balance = balancedef deposit(self, amount):self.balance += amountprint(f"已存入{amount}元,当前余额为{self.balance}元。")def withdraw(self, amount):if self.balance >= amount:self.balance -= amountprint(f"已取出{amount}元,当前余额为{self.balance}元。")else:print("余额不足。")
      • 这样,通过BankAccount类的对象,就可以方便地管理银行账户的相关操作,并且数据和操作被封装在类内部,外部代码无法直接访问和修改账户余额,提高了数据的安全性和代码的可维护性。
    • 代码复用:类可以被多次实例化,创建多个对象,从而实现代码的复用。例如,如果需要管理多个银行账户,只需要创建多个BankAccount类的对象即可:
account1 = BankAccount("123456789", 1000)
account2 = BankAccount("987654321", 2000)
account1.deposit(500)
account2.withdraw(300)
      • 每个对象都有自己独立的属性和行为,这种复用方式大大提高了代码编写的效率,减少了重复代码。
  1. 继承与多态性
    • 继承关系:Python中的类支持继承,子类可以继承父类的属性和方法,并且可以添加自己的新属性和方法或者重写父类的方法。例如,定义一个SavingsAccount类作为BankAccount类的子类,用于表示储蓄账户:
class SavingsAccount(BankAccount):def __init__(self, account_number, balance, interest_rate):super().__init__(account_number, balance)self.interest_rate = interest_ratedef calculate_interest(self):interest = self.balance * self.interest_rateself.deposit(interest)print(f"已计算利息{interest}元,当前余额为{self.balance}元。")
      • 在这里,SavingsAccount类继承了BankAccount类的属性和方法,同时添加了自己的interest_rate属性和calculate_interest方法。通过继承,可以在已有类的基础上快速创建新的类,实现代码的复用和扩展。
    • 多态性:多态性是指不同的类(通常是有继承关系的类)可以对相同的方法调用做出不同的响应。例如,假设有一个函数process_account,它接受一个BankAccount类型的对象作为参数:
def process_account(account):account.deposit(100)
      • 这个函数可以接受BankAccount类或者它的子类(如SavingsAccount)的对象作为参数。当传入不同类型的对象时,deposit方法会根据对象所属的类的具体实现来执行相应的操作,这就是多态性的体现。这种特性使得代码更加灵活和可扩展,可以方便地处理不同类型但具有相似行为的对象。

类与对象

一、类与对象(面向对象)的概念

  1. 类(Class)
    • 类是一种抽象的概念,它定义了具有相同属性和行为的一组对象的模板或蓝图。可以把类看作是一个模具,用它可以创建出多个具体的实例(对象)。
    • 例如,定义一个“汽车”类,它可以包含属性如颜色、品牌、速度等,以及行为如加速、刹车、转弯等。
  1. 对象(Object)
    • 对象是类的具体实例。通过类创建对象的过程称为实例化。每个对象都有自己独立的状态(属性值),但共享类定义的行为(方法)。
    • 例如,根据“汽车”类可以创建出多个具体的汽车对象,每辆汽车都有自己特定的颜色、品牌和速度等属性值。

二、class关键字的使用语法

  1. 定义类
    • 使用class关键字后跟类名来定义一个类。类名通常采用首字母大写的命名风格(PascalCase)。
    • 例如:
class Car:pass
    • 这里定义了一个名为Car的空类。
  1. 类的内容
    • 类可以包含属性和方法。属性是描述对象状态的数据,方法是定义对象行为的函数。
    • 例如:
class Car:def __init__(self, color, brand):self.color = colorself.brand = branddef accelerate(self):print("The car is accelerating.")
    • 这个Car类有一个构造方法__init__用于初始化对象的属性,还有一个方法accelerate表示汽车加速的行为。

三、什么是方法

  1. 定义
    • 方法是定义在类中的函数,用于描述对象的行为。方法可以访问和修改对象的属性,以及与其他对象进行交互。
  1. 调用方法
    • 通过对象来调用方法,使用点号(.)运算符。
    • 例如:
my_car = Car("red", "Toyota")
my_car.accelerate()
    • 这里首先创建了一个Car对象my_car,然后调用了它的accelerate方法。

四、什么是属性

  1. 定义
    • 属性是描述对象状态的数据。属性可以是实例属性(每个对象独立拥有)或类属性(所有对象共享)。
  1. 实例属性
    • 在构造方法__init__中定义的属性通常是实例属性。每个对象都有自己独立的实例属性值。
    • 例如:
class Car:def __init__(self, color, brand):self.color = colorself.brand = brand
    • 这里的colorbrand是实例属性。
  1. 类属性
    • 在类中直接定义的属性是类属性。所有对象共享同一个类属性值。
    • 例如:
class Car:wheels = 4def __init__(self, color, brand):self.color = colorself.brand = brand
    • 这里的wheels是类属性,表示所有汽车都有四个轮子。

五、__init__方法的使用

  1. 构造方法
    • __init__方法是类的特殊方法,也称为构造方法。当创建一个对象时,这个方法会自动被调用,用于初始化对象的属性。
  1. 参数和self
    • __init__方法的第一个参数必须是self,它代表对象本身。其他参数用于接收创建对象时传递的初始值。
    • 例如:
class Car:def __init__(self, color, brand):self.color = colorself.brand = brand
    • 这里的colorbrand是构造方法的参数,用于初始化对象的colorbrand属性。

六、__del__方法的使用

  1. 析构方法
    • __del__方法是类的另一个特殊方法,也称为析构方法。当对象被销毁时,这个方法会自动被调用。
  1. 用途
    • 通常用于释放对象占用的资源,如关闭文件、断开数据库连接等。
    • 例如:
class FileHandler:def __init__(self, filename):self.filename = filenameself.file = open(filename, 'r')def __del__(self):if self.file:self.file.close()
    • 这个类用于处理文件,在构造方法中打开文件,在析构方法中确保文件被关闭。

七、__str__方法的使用

  1. 字符串表示方法
    • __str__方法用于返回对象的字符串表示形式。当使用print()函数或str()函数对对象进行操作时,会自动调用这个方法。
  1. 自定义字符串表示
    • 可以在类中定义__str__方法来返回一个有意义的字符串,以便更好地理解对象的状态。
    • 例如:
class Car:def __init__(self, color, brand):self.color = colorself.brand = branddef __str__(self):return f"{self.color} {self.brand} car"
    • 这里定义了__str__方法,使得当打印一个Car对象时,会输出其颜色和品牌的描述。

总之,理解类与对象、掌握class关键字的使用、了解方法和属性的定义以及特殊方法的作用,是 Python 面向对象编程的基础。这些概念可以帮助你组织和管理代码,提高代码的可维护性和可扩展性。


http://www.mrgr.cn/news/68197.html

相关文章:

  • 【算法】递归+深搜:105.从前序与中序遍历序列构造二叉树
  • 什么是ASO优化?
  • 市场营销应该怎么学?
  • 从零开始学python 6(持续更新中ing)
  • 【计算机网络】TCP协议面试常考(一)
  • 从0开始搭建一个生产级SpringBoot2.0.X项目(十二)SpringBoot接口SpringSecurity JWT鉴权
  • 问:SpringFramwork都有哪些模块?
  • 论文1—《基于卷积神经网络的手术机器人控制系统设计》文献阅读分析报告
  • C++学习笔记----11、模块、头文件及各种主题(一)---- 模板概览与类模板(1)
  • 网络编程(一):UDP socket api => DatagramSocket DatagramPacket
  • 对话框(Dialog)
  • W3C HTML 活动
  • [数组排序] 1122. 数组的相对排序
  • 插入迭代器
  • 口播博主必装的五个App推荐,尤其是程序猿博主
  • 查缺补漏----内部排序算法排序趟数和比较次数
  • SQLI LABS | Less-33 GET-Bypass AddSlashes()
  • RCE漏洞分析
  • OSS和FastDFS的区别
  • 【如何在 Linux 和 Android 系统中杀死进程】
  • 火语言RPA流程组件介绍--获取窗口对象
  • C# 与 C++ 跨进程通信:使用 RabbitMQ 实现消息队列通信
  • Golang | Leetcode Golang题解之第547题身份数量
  • API网关之Gravitee
  • 基于ViT的无监督工业异常检测模型汇总
  • 如何在 Linux 系统中通过进程名杀掉蓝牙进程