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

news2024/12/26 0:58:12

本章是自动化测试的真正开始,因为在后续的过程中,你会接触到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形参传入我们想要增加的值。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/340387.html

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

相关文章

2023同等学力申请硕士计算机综合国考

同等学力国考报名要开始了 2023年2月15日&#xff0c;中国教育考试网和“全国同等学力人员申请硕士学位管理工作信息平台”&#xff08;https://tdxl.chsi.com.cn&#xff0c;联系服务电话&#xff1a;010-67410388&#xff09;公布报名工作通知。考生须按照通知要求进行注册或…

Win11下Linux子系统迁移方法及报错解决

Win11 将Linux子系统从C盘迁移到其他盘Win11下Linux子系统迁移方法及报错解决1、下载LxRunOffline2、ERROR&#xff1a;directory is not empty 报错解决参考链接Win11下Linux子系统迁移方法及报错解决 C盘满了&#xff0c;Ubuntu子系统占了100多G怎么办&#xff1f;直接将子系…

相机出图画面一半清晰,一半模糊的原因是什么?

1、问题背景&#xff1a;在做项目的过程中&#xff0c;有遇到过几次&#xff0c;出图后画面是一半清晰&#xff0c;一半模糊的现象&#xff0c;再重新对焦也是一样。但换了个镜头后就好了&#xff0c;这应该是镜头的质量问题&#xff0c;但导致镜头出现这种问题的具体原因是什么…

【2023unity游戏制作-mango的冒险】-3.基础动作和动画API实现

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏&#xff1a;unity游戏制作 ⭐mango的基础动作动画的添加⭐ 文章目录⭐mango的基础动作动画的添加⭐&#x1f…

本周大新闻|传微软解散工业元宇宙团队,MIT研发垂直堆叠全彩Micro LED

本周大新闻&#xff0c;AR方面&#xff0c;消息称微软解散工业元宇宙团队&#xff1b;德国AR公司Gixel GmbH亮相&#xff1b;Brilliant推出单片式附加形态AR眼镜&#xff1b;MIT研发垂直堆叠全彩Micro LED&#xff1b;谷歌XR串流正式上线。VR方面&#xff0c;索尼发布了PS VR2的…

【手写 Vuex 源码】第八篇 - Vuex 的 State 状态安装

一&#xff0c;前言 上一篇&#xff0c;主要介绍了 Vuex 模块安装的实现&#xff0c;针对 action、mutation、getter 的收集与处理&#xff0c;主要涉及以下几个点&#xff1a; Vuex 模块安装的逻辑&#xff1b;Vuex 代码优化&#xff1b;Vuex 模块安装的实现&#xff1b;Vue…

leetcode-每日一题-2335(简单,贪心)

自己打表看一下过程就可以发现&#xff0c;其实就是每次选两个大的进行--之后秒数加1即可现有一台饮水机&#xff0c;可以制备冷水、温水和热水。每秒钟&#xff0c;可以装满 2 杯 不同 类型的水或者 1 杯任意类型的水。给你一个下标从 0 开始、长度为 3 的整数数组 amount &am…

元学习(Meta Learning)最全论文、视频、书籍资源整理

Meta Learning&#xff0c;叫做元学习或者 Learning to Learn 学会学习&#xff0c;包括Zero-Shot/One-Shot/Few-Shot 学习&#xff0c;模型无关元学习(Model Agnostic Meta Learning)和元强化学习&#xff08;Meta Reinforcement Learning&#xff09;。元学习是人工智能领域&…

Redis基础篇

Redis基础篇 来自黑马的redis课程的笔记 【黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目】 目录Redis基础篇一、初识Redis1.安装2. 数据结构二、Redis常见命令1. Redis通用命令2. string类型2.1 key的层级格式…

【成为架构师课程系列】预备架构 Pre-Architecture 的故事

目录 前言 Pre-architecture的故事 Pre-architecture 核心“四步法” 需求结构化 架构约束

1行Python代码去除图片水印,网友:一干二净

大家好&#xff0c;这里是程序员晚枫。 最近小明在开淘宝店&#xff08;店名&#xff1a;爱吃火锅的少女&#xff09;&#xff0c;需要给自己的原创图片加水印&#xff0c;于是我上次给她开发了增加水印的功能&#xff1a;图片加水印&#xff0c;保护原创图片&#xff0c;一行…

伏并网低电压穿越技术

国内光伏并网低电压穿越要求 略&#xff1a; 低电压穿越方法 当前&#xff0c;光伏电站实现低电压穿越可通过两种方式&#xff0c;即增加硬件设备或者改变控制策略。本节对基于储能设备、基于无功补偿设备、基于无功电流电压支撑控制策略三种实现LVRT的典型方法进行介绍。 …

【MT7628】开发环境搭建-Fedora12一步一步设置共享文件夹

1.按照下图操作,打开设置界面 2.点击设置,弹出如下对话框

【博客620】prometheus如何优化远程读写的性能

prometheus如何优化远程读写的性能 场景 为了解决prometheus本地存储带来的单点问题&#xff0c;我们一般在高可用监控架构中会使用远程存储&#xff0c;并通过配置prometheus的remote_write和remote_read来对接 远程写优化&#xff1a;remote_write 远程写的原理&#xff1a…

Springboot扩展点之@PostConstruct

前言postContruct全限定类名是javax.annotation.PostConstruct&#xff0c;可以看出来其本身不是Spring定义的注解&#xff0c;但是Spring提供了具体的实现&#xff0c;所以这篇文章主要分析的是PostConstruct在Spring项目开发中的功能特性、实现方式和基本工作原理。功能特性从…

Linux c编程之Wireshark

Wireshark是一个网络报文分析软件,是网络应用问题分析必不可少的工具软件。网络管理员可以使用wireshark排查网络问题。程序开发人员可以用来分析应用协议、定位分析应用问题。无论是网络应用程序开发人员、测试人员、部署人员、技术支持人员,掌握wireshark的使用对于分析网络…

【LeetCode】每日一题(2)

目录 题目&#xff1a;1138. 字母板上的路径 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 写在最后&#xff1a; 题目&#xff1a;1138. 字母板上的路径 - 力扣&am…

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

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

RocketMQ5.0.0消息存储<三>_消息转发与恢复机制

目录 一、消息转发 1. ReputMessageService线程初始化 2. 消息转发更新ConsumeQueue 3. 消息转发更新IndexFile 二、恢复机制 1. Broker加载存储文件 2. Broker正常退出的文件恢复 3. Broker异常退出的文件恢复 三、参考资料 一、消息转发 消息消费队列文件、索引文件…

七大设计原则之单一职责原则应用

目录1 单一职责原则介绍2 单一职责原则应用1 单一职责原则介绍 单一职责&#xff08;Simple Responsibility Pinciple&#xff0c;SRP&#xff09;是指不要存在多于一个导致类变更的原因。假设我们有一个 Class 负责两个职责&#xff0c;一旦发生需求变更&#xff0c;修改其中…