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 对于私有变量的实现是引入了一…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...

高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...