软件测试基础十四(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.mzph.cn/web/58581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[High Speed Serial ] Xilinx

Xilinx 高速串行数据接口 收发器产品涵盖了当今高速协议的方方面面。GTH 和 GTY 收发器提供要求苛刻的光互连所需的低抖动,并具有世界一流的自适应均衡功能,具有困难的背板操作所需的 PCS 功能。 Versal™ GTY (32.75Gb/s)&…

基于CNN-RNN的影像报告生成

项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【PaddleNLP的FAQ问答机器人】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

java list使用基本操作

import java.util.ArrayList; import java.util.Collection; import java.util.Iterator;public class Main {public static void main(String[] args) {ArrayList list new ArrayList();list.add("张三");list.add("李四");list.add("王五");l…

高级 <HarmonyOS主题课>借助AR引擎帮助应用实现虚拟与现实交互的能力的课后习题

持而盈之,不如其已; 揣而锐之,不可长保。 金玉满堂,莫之能守; 富贵而骄,自遗其咎。 功成身退,天之道也。 VR (Virtual Reality): 虚拟现实技术 AR (Augmented Reality): 增强现实) XR.(Extend…

高校实验室安全巡检系统设计与实现(源码+定制+开发)高校实验室巡检系统、实验室安全管理平台、实验室安全监控系统、智能实验室巡查系统、高校实验室风险管理

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

102、Python并发编程:Queue与生产者消费者模型实现解耦、协作

引言 在实际业务场景中,很多时候在处理复杂任务的时候,会拆分上下游各个环节,形成一个类似于流水线的处理方式。上游类似于生产者,下游要依赖上游的输出进行工作,类似于消费者。但是,很多时候,…

【梯度提升专题】XGBoost、Adaboost、CatBoost预测合集:抗乳腺癌药物优化、信贷风控、比特币应用|附数据代码...

全文链接:https://tecdat.cn/?p38115 分析师:Yang Yang,Kechen Zhao 在当今科技日新月异的时代,数据的有效利用成为各领域突破发展的关键。于医疗领域,乳腺癌的高发性与严重性不容忽视,优化抗乳腺癌候选药物的筛选与特…

机器学习与AI|如何利用数据科学优化库存周转率?

对于所有零售商来说,良好的库存管理都是非常重要的。众所周知,商品如果不放在货架上就无法出售,而如果库存过多则意味着严重的财务负担。 但是做好库存管理绝非易事,它依赖于对未来需求的准确预测和确保始终有合适库存的敏捷供应链…

安卓智能对讲终端|北斗有源终端|三防对讲机|单兵终端|单北斗

在当今快速发展的通信技术时代,智能对讲手持机已成为众多行业领域中不可或缺的通讯工具。QM240T安卓智能对讲手持机,作为一款集先进技术与实用功能于一身的高端设备,凭借其卓越的性能和多样化的应用特性,正逐步引领对讲机市场的革…

【数据集】【YOLO】【目标检测】抽烟识别数据集 6953 张,YOLO/VOC格式标注,吸烟检测!

数据集介绍 【数据集】抽烟识别数据集 6953 张,目标检测,包含YOLO/VOC格式标注。数据集中包含1种分类:“smoking”。数据集来自国内外图片网站和视频截图。检测范围园区吸烟检测、禁烟区吸烟检测、监控吸烟检测、无人机吸烟检测等。 主页私…

软件设计师-上午题-15 计算机网络(5分)

计算机网络题号一般为66-70题,分值一般为5分。 目录 1 网络设备 1.1 真题 2 协议簇 2.1 真题 3 TCP和UDP 3.1 真题 4 SMTP和POP3 4.1 真题 5 ARP 5.1 真题 6 DHCP 6.1 真题 7 URL 7.1 真题 8 浏览器 8.1 真题 9 IP地址和子网掩码 9.1 真题 10 I…

视频制作与剪辑怎么学,零基础入门视频剪辑和制作

视频制作与剪辑是一门充满创意与挑战的艺术形式,对于零基础的学习者来说,没选对软件不了解剪辑步骤,入门可能会显得有些棘手。接下来,我们将一同探讨如何开启视频剪辑与制作之旅,让新手从零基础入门,逐步迈…

[Element] el-table修改滚动条上部分的背景色

[Element] el-table修改滚动条上部分的背景色 ::v-deep .el-table__cell .gutter {background: red;}

SAP ABAP开发学习——WDA 七 使用文本与消息

目录 从数据字典读取文本 使用OTR文本 从程序中调用OTR文本 消息分类 定义消息显示位置 text类消息的使用 T100 消息的使用 OTR消息实例 消息内容修改 从数据字典读取文本 使用OTR文本 可以自己创建OTR文本 从程序中调用OTR文本 消息分类 定义消息显示位置 text类消息的…

基于物联网设计的地下煤矿安全监测与预警

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成 1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发 1.5 模块的技术详情介绍【1】NBIOT-BC26模块【2】MQ5传感器【4】DHT11传感器【5】红外热释电人体检…

golang分布式缓存项目 Day 1

注:该项目原作者:https://geektutu.com/post/geecache-day1.html。本文旨在记录本人做该项目时的一些疑惑解答以及部分的测试样例以便于本人复习。 LRU缓存淘汰策略 三种缓存淘汰策略 FIFO(First In, First Out)先进先出 原理&…

Pr 视频过渡:沉浸式视频 - VR 默比乌斯缩放

效果面板/视频过渡/沉浸式视频/VR 默比乌斯缩放 Video Transitions/Immersive Video/VR Mobius Zoom VR 默比乌斯缩放 VR Mobius Zoom用于 VR 视频中的缩放式场景切换,通过缩小或放大的渐变效果在两个场景之间平滑过渡。 自动 VR 属性 Auto VR Properties 默认勾选…

华为实时视频使用FLV播放RTSP流

import flvjs from ‘flv.js’; 安装flv <video style"width:100%;height:100%;" ref"videoHWRef" ></video>// src 华为rtsp流 rtsp://admin:Huaweivideo10.10.8.151:554/xxx/trackID1// url 需要后端提供视频源地址playVideo() {if (fl…

【华为机试题】光伏场地建设规划 [Python]

题目 代码 class Solution:def func(self, input_args, area_list):count 0for i in range(input_args[0] - input_args[2] 1):for j in range(input_args[1] - input_args[2] 1):count 1 if self.area_compute(area_list,i,j,input_args[2],input_args[3]) else 0print(c…

备考25年二建,最好这样选专业!

2025年的二建备考已经开始了&#xff0c;很多考生在纠结报考哪个专业&#xff0c;二级建造师各专业难度如何&#xff1f;哪个专业含金量更高&#xff1f; 今天就带大家了解一下这六大专业&#xff0c;一起来看~ ​建筑专业 考核方向&#xff1a;建筑工程技术要求、建筑工程专…