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快速上手系列--类--详解篇
本章是自动化测试的真正开始,因为在后续的过程中,你会接触到unittest框架,pytest框架,而不仅仅只是写一个函数selenium脚本这么简单了。1、创建类1.1、了解类我们首先了解一下,为什么要使用类,类可以拿来干…...
Dubbo基本原理和用法讲解
Dubbo基本原理和用法讲解 序言:学习一项新技术,一般从是什么、为什么、怎么用三个方面进行学习。本篇文章也不例外,笔者将从Dubbo是什么?、为什么会产生Dubbo技术?、如何在项目中使用Dubbo技术。最后,笔者…...
TCP详解及面试相关问题
文章目录1、计算机模型2、客户端和服务端通信——TCP协议(1)socket套接字(2)TCP三次握手——创建socket(3)连接的本质(4)TCP四次挥手——释放socket资源(5)TC…...
LVGL V9.0基于VS2022仿真搭建
完整Demo,lvgl,lvgl_drivers相关资料下载 链接:https://pan.baidu.com/s/1DNJeHdoaPyfe1BsLb9wjRg 提取码:wov7 其它资料下载 链接:https://pan.baidu.com/s/1nV9jojPEPWSWZdYhaCZWTA 提取码:91j8 下载资料后解压文…...
多线程面试题开胃菜2(5道)
一.一个线程的生命周期有哪几种状态?它们之间如何流转的?NEW:毫无疑问表示的是刚创建的线程,还没有开始启动。RUNNABLE: 表示线程已经触发 start()方式调用,线程正式启动,线程处于运行中状态。BLOCKED&…...
第三次作业
一、单表查询素材: 表名:worker-- 表中字段均为中文,比如 部门号 工资 职工号 参加工作 等CREATE TABLE worker (部门号 int(11) NOT NULL,职工号 int(11) NOT NULL,工作时间 date NOT NULL,工资 float(8,2) NOT NULL,政治面貌 varchar(10) N…...
基础算法(直接插入,希尔排序,快排,归并,折半查找)
/*直接插入:把待排序序列分为有无序区和和无序区,使用无序区的数据一次插入倒有序区中,最终结果尾有序序列 1> 把数据分为有序区和无序区,默认第一个元素在有序区,剩下在无序区 2> 外层循环,循环无…...
电子学会2022年12月青少年软件编程(图形化)等级考试试卷(一级)答案解析
目录 一、单选题(共25题,共50分) 二、判断题(共10题,共20分) 三、编程题(共2题,共30分) 青少年软件编程(图形化)等级考试试卷(一级) 一、单选题(共25题,共50分) 1. 小明想在开始…...
基于JAVA的超级玛丽设计与实现
技术:Java等摘要:随着计算机技术及网络技术的不断发展,电子游戏越来越普及。经典游戏“超级玛丽”因其本身所具有的娱乐性与教育意义而被人们广泛接受,在广大的青少年玩家中享有极高的知名度。Java语言作为一种完全面向对象的程序…...
硬件工程师入门基础知识(一)基础元器件认识(二)
硬件工程师入门基础知识 (一)基础元器件认识(二) tips:学习资料和数据来自《硬件工程师炼成之路》、百度百科、网上资料。 1.二极管 2.三极管 3.MOS管 4.IGBT 5.晶振 1.二极管 肖特基二极管和硅二极管的比较&#…...
Python-项目实战--贪吃蛇小游戏-游戏框架搭建(2)
1.游戏框架搭建介绍pygame开发图像界面游戏的几个要素,并且把贪吃蛇游戏的整体框架搭建完成本节知识点包括:pygame的初始化和退出游戏主窗口游戏循环和游戏时钟主窗口背景颜色绘制文本pygame的坐标系游戏事件监听绘制图形定时器事件1.1pygame的初始化和退…...
JVM基础
JVM基础 1.JVM的位置 JVM是运行在操作系统之上的,它与硬件没有直接的交互 2.JVM体系结构图 这个区域一定不会有垃圾回收 所谓JVM的调优,其实就是在调这个区域,而且99%情况下都在调堆 ! 3.类加载器ClassLoader 先来看看一个类加载到 JVM 的…...
Android 内存优化(基础轮)必看~
本次分享主要分为五个部分内容,第一部分内容是 5W2H 分析内存优化,第二部分内容是内存管理机制,第三部分内容是内存优化 SOP,第四部分内容是 内存优化指导原则, 最后一部分内容是总结与展望。 如果学完内存优化的基础论…...
STM32单片机GSM短信自动存取快递柜
实践制作DIY- GC0104-自动存取快递柜 一、功能说明: 基于STM32单片机设计-自动存取快递柜 二、功能介绍: STM32F103C系列最小系统板0.96寸OLED显示器DY-SV17F串口语音播报模块4*4矩阵键盘GSM短信模块4路舵机(模拟4个柜子) ***…...
力扣(LeetCode)410. 分割数组的最大值(2023.02.12)
给定一个非负整数数组 nums 和一个整数 m ,你需要将这个数组分成 m 个非空的连续子数组。 设计一个算法使得这 m 个子数组各自和的最大值最小。 示例 1: 输入:nums [7,2,5,10,8], m 2 输出:18 解释: 一共有四种方法…...
管理还原数据
还原数据还原数据是:• 原始的、修改之前的数据副本• 针对更改数据的每个事务处理而捕获• 至少保留到事务处理结束• 用于支持:– 回退操作– 读取一致性查询– Oracle 闪回查询、Oracle 闪回事务处理和 Oracle 闪回表– 从失败的事务处理中进行恢复存…...
c的关键字有那些
编程语言中的关键字 C语言简洁、紧凑,使用方便、灵活。ANSI C标准C语言共有32个关键字,9种控制语句,程序书写形式自由,区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。 C 语言可以像汇编语言一样对位、字节和…...
链表OJ(一)
目录 从尾到头打印链表_牛客题霸_牛客网 160. 相交链表 141. 环形链表 142. 环形链表 II 138. 复制带随机指针的链表 从尾到头打印链表_牛客题霸_牛客网 输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。 如输入…...
MySQL第三次作业
1、显示所有职工的基本信息。 2、查询所有职工所属部门的部门号,不显示重复的部门号。 3、求出所有职工的人数。 4、列出最高工和最低工资。 5、列出职工的平均工资和总工资。 6、创建一个只有职工号、姓名和参加工作的新表,名为工作日期表…...
Python中的类和对象(7)
1.私有变量 在大多数面向对象的编程语言中,都存在着私有变量(private variable)的概念,所谓私有变量,就是指通过某种手段,使得对象中的属性或方法无法被外部所访问。 Python 对于私有变量的实现是引入了一…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
