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

Python快速上手系列--类--详解篇

本章是自动化测试的真正开始,因为在后续的过程中,你会接触到unittest框架,pytest框架,而不仅仅只是写一个函数+selenium脚本这么简单了。

1、创建类

1.1、了解类

我们首先了解一下,为什么要使用类,类可以拿来干什么!

类可以理解为一个工具箱,你可以往里面放各种各样的工具,这里的工具就是我们所说的函数方法,你放入了什么样的工具,你就可以拿来干什么,放入了一个锤子,你可以拿来钉钉子,可以拿来砸东西,你也可以拿来干其他的,这也就是我们所说的调用类或者调用类中的方法。

首先我们创建一个学生姓名类student_name:我定义了一个姓名个年龄属性,还定义了一个跑和睡觉的函数方法。

# 创建一个名为student_name的类class student_name:    # 使用特殊方法__init__(),初始化属性    def __init__(self,name,age):        self.name = name        self.age = age    def run(self):        print(f"{self.name}跑了起来!")    def sleep(self):        print(f"{self.age}岁的{self.name}睡觉去了")

__init__()方法:这里我们定义了三个形参,self是也不可少的,它是形参,它将属性初始化,以便于实参后续传值。

在类中,python调用方法创建实例进行传值的时候,都会自动传入到实参self中,它是一个指向实例本身的引用,我们传递实参给到student_name类,self会自动将值给到属性,来达到我们想要的效果。

2、根据类创建实例

以上述为例,我们创建一个student_name,我们来使用类来创建实例

2.1、访问属性

class Student_name:    height = 180    #  类属性    def __init__(self,name,age):        self.name = name   # 实例属性        self.age = age       @classmethod    def run1(cls):        # 类方法        print(f"今年身高{cls.height}!")        # print(self.name)   类方法跟静态方法不能调用实例变量、实例方法    @staticmethod    def run3():             # 静态方法,用法参照下述,跟类方法要求一致不能调用实例变量、实例方法        # print(f"今年身高{Student_name.height}!")        pass        def run2(self):        # 实例方法        # print(f"今年身高{Student_name.height}!")        print(f"今年身高{self.height}!")    def sleep(self):        print(f"{self.age}岁的{self.name}睡觉去了")names = Student_name('托马','18')names.sleep()names.run1()names.run2()print(f"{names.age}岁的{names.name}身高{names.height},他现在睡着了")

在sleep中已经调用过类中的实例属性了,所以,我们只需要指定类并且告诉程序我需要执行sleep方法,那么程序就会去调用这么方法,并且调用实例属性。

在上述代码中我们看到了一个装饰器@classmethod,这是类方法,用来操作类属性的。我们可以看到,在后面的run2中我注释了一个用类来调用类属性,以及用实例方法调用类属性,都是可以的。这里做一个了解。

这里还有一个就是实例方法,这里为什么叫实例方法,它其实跟前面学的函数没什么太大的区别,前面我们叫函数方法,这里叫实例方法,都是方法,这里体现在类中。在它的方法中我们可以用类名去调用类属性进行使用。

在类外面我们额外的使用了一个print,这里是告诉你,类属性我们这样也能调用。

2.2、私有访问

# -->>>托马<<<---class Student:    __sex = '男'     # 私有类属性    def __init__(self,name,age):        self.name = name        self.__age = age            # 私有实例属性    def __name(self):               # 私有实例方法        print("我喜欢吃炸鸡腿")        print(f"今年{self.__age}岁了")        print(f"{Student.__sex}")s = Student('托马',18)print(s._Student__age)  # 私有年龄访问s._Student__name()      # 私有实例访问b = s._Student__sex     # 私有类属性访问print(b)"""18我喜欢吃炸鸡腿今年18岁了男男"""

这里还是比较值得关注的,虽然测试脚本中很少用到,大家留个印象。

另外介绍一个函数dir(),用来查看对象属性的,用法:如上述示例,实例化类的时候有一个变量s,我们可以直接print(dir(s)。

私有访问的一些方式就是根据这里面打印的值来进访问的哦。提供参照。

2.3、调用方法

# 创建一个名为student_name的类class student_name:    # 使用特殊方法__init__()    def __init__(self,name,age):        self.name = name        self.age = age    def run(self):        print(f"{self.name}跑了起来!")    def sleep(self):        print(f"{self.age}岁的{self.name}睡觉去了")names = student_name('托马','18')names.run()names.sleep()

这里其实跟我们之前学习的调用函数方法其实是一样的,只是 写在了类中,首先传值给类,再由类传给函数方法。

2.4、创建多个实例

class Student_name:    def __init__(self,name,age):        self.name = name        self.age = age    def run(self):        print(f"{self.name}跑了起来!")    def sleep(self):        print(f"{self.age}岁的{self.name}睡觉去了")names = Student_name('托马','18')names_1 = Student_name('安安','20')names.run()names.sleep()names_1.run()names_1.sleep()

创建多个实例我们就需要调用多次方法才能实现效果哦

3、使用类和实例

在使用类和实例之前我们需要创建一个类

class Friend_name:    def __init__(self,name,age,height):        self.name = name        self.age = age        self.height = height    # 创建一个方法,用于归总朋友的所有信息    def total(self):        total_message = f"{self.name}今年{self.age}岁,身高{self.height}!"        return total_messagenames = Friend_name('托马','18',178)print(names.total())

这里的__init__()方法跟1.1的例子的是一样的,函数方法total(self)是我们自己新定义的,函数中我们又另外定义了一个变量,接收我们所需的信息,并反回这个变量值。在最后我们打印值里面调用了实参变量和tota方法并进行输出。

3.1、给属性指定默认值

有些时候我们可以不定义形参,直接在__init__()方法中直接精选指定默认值。

我们新定义了一个weight属性:

class Friend_name:    def __init__(self,name,age,height):        # 初始化属性        self.name = name        self.age = age        self.height = height        # 定义一个默认值        self.weight = 140    def total(self):        total_message = f"{self.name}今年{self.age}岁,身高{self.height}!"        return total_messagenames = Friend_name('托马','18',180)print(names.total())print(f"托马体重为:{names.weight}斤")

定义了新的属性后,我们给定了一个默认值,这个是可以直接调用的哦,就是我们在2.1章节讲过的调用属性值哦。

3.2、修改属性值

3.1中我们定义一个默认属性值,那么我还可以对它进行修改!

class Friend_name:    def __init__(self,name,age,height):        self.name = name        self.age = age        self.height = height        self.weight = 140    def total(self):        total_message = f"{self.name}今年{self.age}岁,身高{self.height}!"        return total_message    #定义一个新的形参    def update_total(self,update_weight):        self.weight = update_weight        print(f"{self.name}体重为{self.weight}")names = Friend_name('托马','18',175)names.update_total(180)

我们定义了一个新的形参后,使用self形参以便于更改后的值传入,在最后我们调用update_total()函数并将想要修改的值赋予它,随后python就会将我们赋予的值通过形参self传入到weight中,并打印一条信息,证明修改成功了。

3.3、对属性值进行递增

既然可以定义默认值,又可以修改默认值,当然可以对默认值进行递增。而且只需要改动一点点就可以了!

class Friend_name:    def __init__(self,name,age,height):        self.name = name        self.age = age        self.height = height        self.weight = 140    def total(self):        total_message = f"{self.name}今年{self.age}岁,身高{self.height}!"        return total_message    #定义一个新的形参    def update_total(self,update_weight):        # 我们将这里改成运算符加就可以了        self.weight += update_weight        print(f"{self.name}体重为{self.weight}")names = Friend_name('托马','18',175)names.update_total(10)

我们将weight加上新定义的形参即可,最后我们调用新定义的形参,通过self形参传入我们想要增加的值。

本章你学会了吗,下一章我们接着讲类继承!

相关文章:

Python快速上手系列--类--详解篇

本章是自动化测试的真正开始&#xff0c;因为在后续的过程中&#xff0c;你会接触到unittest框架&#xff0c;pytest框架&#xff0c;而不仅仅只是写一个函数selenium脚本这么简单了。1、创建类1.1、了解类我们首先了解一下&#xff0c;为什么要使用类&#xff0c;类可以拿来干…...

Dubbo基本原理和用法讲解

Dubbo基本原理和用法讲解 序言&#xff1a;学习一项新技术&#xff0c;一般从是什么、为什么、怎么用三个方面进行学习。本篇文章也不例外&#xff0c;笔者将从Dubbo是什么&#xff1f;、为什么会产生Dubbo技术&#xff1f;、如何在项目中使用Dubbo技术。最后&#xff0c;笔者…...

TCP详解及面试相关问题

文章目录1、计算机模型2、客户端和服务端通信——TCP协议&#xff08;1&#xff09;socket套接字&#xff08;2&#xff09;TCP三次握手——创建socket&#xff08;3&#xff09;连接的本质&#xff08;4&#xff09;TCP四次挥手——释放socket资源&#xff08;5&#xff09;TC…...

LVGL V9.0基于VS2022仿真搭建

完整Demo&#xff0c;lvgl,lvgl_drivers相关资料下载 链接&#xff1a;https://pan.baidu.com/s/1DNJeHdoaPyfe1BsLb9wjRg 提取码&#xff1a;wov7 其它资料下载 链接&#xff1a;https://pan.baidu.com/s/1nV9jojPEPWSWZdYhaCZWTA 提取码&#xff1a;91j8 下载资料后解压文…...

多线程面试题开胃菜2(5道)

一.一个线程的生命周期有哪几种状态&#xff1f;它们之间如何流转的&#xff1f;NEW&#xff1a;毫无疑问表示的是刚创建的线程&#xff0c;还没有开始启动。RUNNABLE: 表示线程已经触发 start()方式调用&#xff0c;线程正式启动&#xff0c;线程处于运行中状态。BLOCKED&…...

第三次作业

一、单表查询素材&#xff1a; 表名&#xff1a;worker-- 表中字段均为中文&#xff0c;比如 部门号 工资 职工号 参加工作 等CREATE TABLE worker (部门号 int(11) NOT NULL,职工号 int(11) NOT NULL,工作时间 date NOT NULL,工资 float(8,2) NOT NULL,政治面貌 varchar(10) N…...

基础算法(直接插入,希尔排序,快排,归并,折半查找)

/*直接插入&#xff1a;把待排序序列分为有无序区和和无序区&#xff0c;使用无序区的数据一次插入倒有序区中&#xff0c;最终结果尾有序序列 1> 把数据分为有序区和无序区&#xff0c;默认第一个元素在有序区&#xff0c;剩下在无序区 2> 外层循环&#xff0c;循环无…...

电子学会2022年12月青少年软件编程(图形化)等级考试试卷(一级)答案解析

目录 一、单选题(共25题&#xff0c;共50分) 二、判断题(共10题&#xff0c;共20分) 三、编程题(共2题&#xff0c;共30分) 青少年软件编程&#xff08;图形化&#xff09;等级考试试卷&#xff08;一级&#xff09; 一、单选题(共25题&#xff0c;共50分) 1. 小明想在开始…...

基于JAVA的超级玛丽设计与实现

技术&#xff1a;Java等摘要&#xff1a;随着计算机技术及网络技术的不断发展&#xff0c;电子游戏越来越普及。经典游戏“超级玛丽”因其本身所具有的娱乐性与教育意义而被人们广泛接受&#xff0c;在广大的青少年玩家中享有极高的知名度。Java语言作为一种完全面向对象的程序…...

硬件工程师入门基础知识(一)基础元器件认识(二)

硬件工程师入门基础知识 &#xff08;一&#xff09;基础元器件认识&#xff08;二&#xff09; tips&#xff1a;学习资料和数据来自《硬件工程师炼成之路》、百度百科、网上资料。 1.二极管 2.三极管 3.MOS管 4.IGBT 5.晶振 1.二极管 肖特基二极管和硅二极管的比较&#…...

Python-项目实战--贪吃蛇小游戏-游戏框架搭建(2)

1.游戏框架搭建介绍pygame开发图像界面游戏的几个要素&#xff0c;并且把贪吃蛇游戏的整体框架搭建完成本节知识点包括&#xff1a;pygame的初始化和退出游戏主窗口游戏循环和游戏时钟主窗口背景颜色绘制文本pygame的坐标系游戏事件监听绘制图形定时器事件1.1pygame的初始化和退…...

JVM基础

JVM基础 1.JVM的位置 JVM是运行在操作系统之上的&#xff0c;它与硬件没有直接的交互 2.JVM体系结构图 这个区域一定不会有垃圾回收 所谓JVM的调优&#xff0c;其实就是在调这个区域&#xff0c;而且99%情况下都在调堆 ! 3.类加载器ClassLoader 先来看看一个类加载到 JVM 的…...

Android 内存优化(基础轮)必看~

本次分享主要分为五个部分内容&#xff0c;第一部分内容是 5W2H 分析内存优化&#xff0c;第二部分内容是内存管理机制&#xff0c;第三部分内容是内存优化 SOP&#xff0c;第四部分内容是 内存优化指导原则&#xff0c; 最后一部分内容是总结与展望。 如果学完内存优化的基础论…...

STM32单片机GSM短信自动存取快递柜

实践制作DIY- GC0104-自动存取快递柜 一、功能说明&#xff1a; 基于STM32单片机设计-自动存取快递柜 二、功能介绍&#xff1a; STM32F103C系列最小系统板0.96寸OLED显示器DY-SV17F串口语音播报模块4*4矩阵键盘GSM短信模块4路舵机&#xff08;模拟4个柜子&#xff09; ***…...

力扣(LeetCode)410. 分割数组的最大值(2023.02.12)

给定一个非负整数数组 nums 和一个整数 m &#xff0c;你需要将这个数组分成 m 个非空的连续子数组。 设计一个算法使得这 m 个子数组各自和的最大值最小。 示例 1&#xff1a; 输入&#xff1a;nums [7,2,5,10,8], m 2 输出&#xff1a;18 解释&#xff1a; 一共有四种方法…...

管理还原数据

还原数据还原数据是&#xff1a;• 原始的、修改之前的数据副本• 针对更改数据的每个事务处理而捕获• 至少保留到事务处理结束• 用于支持&#xff1a;– 回退操作– 读取一致性查询– Oracle 闪回查询、Oracle 闪回事务处理和 Oracle 闪回表– 从失败的事务处理中进行恢复存…...

c的关键字有那些

编程语言中的关键字 C语言简洁、紧凑&#xff0c;使用方便、灵活。ANSI C标准C语言共有32个关键字&#xff0c;9种控制语句&#xff0c;程序书写形式自由&#xff0c;区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。 C 语言可以像汇编语言一样对位、字节和…...

链表OJ(一)

目录 从尾到头打印链表_牛客题霸_牛客网 160. 相交链表 141. 环形链表 142. 环形链表 II 138. 复制带随机指针的链表 从尾到头打印链表_牛客题霸_牛客网 输入一个链表的头节点&#xff0c;按链表从尾到头的顺序返回每个节点的值&#xff08;用数组返回&#xff09;。 如输入…...

MySQL第三次作业

1、显示所有职工的基本信息。 2、查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号。 3、求出所有职工的人数。 4、列出最高工和最低工资。 5、列出职工的平均工资和总工资。 6、创建一个只有职工号、姓名和参加工作的新表&#xff0c;名为工作日期表…...

Python中的类和对象(7)

1.私有变量 在大多数面向对象的编程语言中&#xff0c;都存在着私有变量&#xff08;private variable&#xff09;的概念&#xff0c;所谓私有变量&#xff0c;就是指通过某种手段&#xff0c;使得对象中的属性或方法无法被外部所访问。 Python 对于私有变量的实现是引入了一…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...