欢迎光临
我们一直在努力

Python笔记(软件测试学习)

注释

注释是对代码解释说明的文字,不会执行,可以增加代码的可读性

单行注释:使用#空格进行注释   快捷键ctrl/

多行注释:使用三对双引号或单引号包括起来的内容,多行注释中的内容可以换行书写

        三对引号注释一般写在文件的最开始部分,或者文档注释处(函数)

文档注释

文档注释的本质还是注释,只不过书写的位置和作用比较特殊

书写位置,在函数名的下方使用三对双引号进行的注释

作用:告诉别人这个函数如何使用的,干什么的

查看,在调用的时候,将光标放到函数名上,使用快捷键Ctrl q

三种波浪线和PEP8

红色波浪线:  是代码的错误,必须处理 ,代码才能继续执行

        注意:某些代码没有写完,也会出现红色波浪线

灰色波浪线:不会影响代码的正常执行,基本上所有的灰色波浪线都是PEP8造成的

PEP8:是Python代码的书写规范,如果不按照这个规范书写,会给灰色波浪线提示

        在书写代码的时候注意PEP8的代码规范

        可以在书写完成之后,使用快捷键Ctrl Alt L来按照PEP8的规范自动格式化代码

绿色波浪线:不影响代码的正常执行,在引号中,认为你书写的内容不是一个单词

变量

作用:用来存储数据的(在程序代码中出现的数据,想要保存下来使用,就必须使用变量)

注意:变量必须先定义后使用

定义变量

变量名 = 数据值  (可以理解为将数据值保存到变量中)

使用变量

变量定义之后,想要使用变量中的数据,直接使用变量名即可

变量名的命名规范

必须由字母 数字和下划线组成,并且不能以数字开头

不能使用Python中的关键字作为变量名

区分大小写

数据类型

数字类型

        整型(int),就是整数

        浮点型(float),就是小数

        布尔类型(bool),只有两个值,为真True和假False

        复数类型

非数字类型

        字符串(str),使用引号引起来的就是字符串

        列表(list)

        元组(tuple)

        字典(dict)

type()函数:可以获取变量的数据类型

输入

获取用户使用键盘录入的内容

变量 = input(‘提示的信息’)

        代码从上到下执行,遇到 input 函数之后,会暂停执行,等待用户的输入

        在输入的过程中,遇到回车,代表本次输入结束

        将输入的内容保存到等号左边的变量中,并且变量的数据类型一定是str

输出

输出使用的函数是print()函数,将程序中的数据或者结果打印到控制台

格式化输出

在字符串指定的位置,输出变量中存储的值

        在需要使用变量的地方,使用特殊符号占位

        使用变量填充占位的数据

%格式化输出占位符号

        %d占位,填充整型数据

        %f占位,填充浮点型数据

        %s占位,填充字符串数据

F-string(f字符串的格式化方法) 需要Python版本>=3.6

        需要在字符串的前边加上f""或者F“”

        占位符号统一变为{}

        需要填充的变量写在{}中

字符串格式化的补充

        字符串.format()   可以在任意版本中使用

        在需要使用变量的地方使用{}占位

        '{},{}…'.format(变量,变量,…)

类型转换

根据代码的需要,将一种数据类型转换为另一种数据类型

数据类型转换,不会改变原来数据的类型,会生成一个新的数据类型 

变量 = 要转换的类型(原数据)

        注意:数据原来是什么类型,要转换为什么类型

int()将其他类型转换为int类型

        可以将float类型的数字转换为整型

        可以将整数类型的字符串转换为整型

float()将其他类型转换为浮点型

        可以将int类型转换为浮点型

        可以将数字类型的字符串(整数类型和小数类型)转换为浮点型

str()将其他类型转换为字符串类型

        任何类型都可以使用str()将其转换为字符串,一般都是直接加上引号

 运算符

算术运算符

比较运算符

比较运算符得到都是bool类型

> < >= <=

==判断两个数是否相等

!=判断两个数是否不相等

逻辑运算符

逻辑运算符可以连接多个条件,在判断和循环中使用

and 逻辑与,和,并且

        条件都需要为真,即一假为假,当第一个条件为假,后面的条件不再判断

or 逻辑或,或者,

        满足一个条件即可,即一真为真,当第一个条件为真时,后面的条件不再判断

not 逻辑非,取反

赋值运算符

赋值运算符 = ,作用就是将等号右边的值保存到等号左边的变量中

复合赋值运算符(将算术运算符和赋值运算符进行结合)

运算符优先级

优先级:先算谁,再算谁。不确定优先级,就用()

()> ** > * / // % > + –

判断

在程序代码中需要使用 if elif else 三个关键字来实现

在代码中有判断语句,代码不会全部执行,会有一部分不会执行

if 的基本结构

基本语法

        if 判断条件:

                书写条件成立(真),执行的代码

注意:

        if是一个关键字,和后续的判断条件之间需要一个空格

        判断条件后边需要一个冒号

        冒号之后会策划,代码需要缩进,一般是4个空格或一个tab键

        所有在if代码下方的缩进中书写的代码,都属于if语句的代码块,判断条件为True的时候会执行

        if代码块中的代码,要么都执行,要么都不执行

        if代码块结束之后,代码要顶格书写(不再有缩进),表示是和if无关的代码

if-else结构

基本语法

        if 判断条件:

                 书写条件成立(真),执行的代码

        else:

                  书写条件不成立(假),执行的代码

注意:

        else是关键字,后边需要冒号

        冒号之后回车,同样需要缩进

        处于else代码下方缩进中的内容,属于else的代码块

        if和else的代码块,只会执行其中的一个

        else需要结合if使用

if elif else结构

如果某个判断条件有多个,建议使用 if elif else 结构来实现

基本语法:

        if 条件1:

                条件1成立执行的代码

        elif 条件2:

                条件2成立执行的代码

        else:

                以上条件都不成立,执行的代码

注意:

        elif是关键字,后边和判断条件之间需要一个空格,判断条件之后需要冒号

        冒号之后回车需要缩进,处在这个缩进中的代码表示是elif的代码块

        在一个if判断中,可以有多个elif

        只有if的条件不成立,才会去判断elif的条件

        在一个if中,如果有多个elif,只要有一个条件成立,后续的所有都不再判断

if 嵌套     

  if 嵌套是指在一个if(elif else)中嵌套另一个if

使用场景:判断条件存在递进关系(只有第一个条件满足了,才会判断第二个条件)

Debug调试代码

debug在代码中出现问题错误(bug),可以使用debug来调试代码,查找错误

循环

程序开发中,有三大流程(三大结构):

        顺序,代码从上到下,全部执行

        分支,判断语句,代码有选择性的执行

        循环,重复执行某一部分的代码

循环的作用:让指定的代码重复的执行

while 循环

基本语法结构:

1.设置循环的初始条件(计数器)

2.书写循环的判断条件

while 判断条件:

        3.需要重复执行的代码

        4.改变循环的初始条件(计数器)

for 循环

for 循环可以遍历容器中的数据(遍历:从容器中把数据一个一个取出)(容器:可以简单理解成盒子,盒子中可以存放很多的数据,如字符串、列表、元组、字典)

for 循环也可以称为 for 遍历

基本语法结构:

for 变量名 in 容器:

        重复执行的代码

注意:

        for 和 in 都是关键字        

        容器中有多少个数据,循环会执行多少次

        每次循环,会将容器中数据取出一个保存到 in 关键字前边的变量中

指定次数的循环语法:

for 变量 in range(n):

        重复执行的代码

注意:

        range()是python中的函数,作用是可以生成[0,n)之间的整数,不包含n,一共有n个数字,即循环n次

        想让for循环多少次,n就写几

        变量的值,也是每次循环从[0,n)取出一个值,第一次取得是0,最后一次取得是n-1

        range(a,b)作用是生成[a,b)之间的整数数字

死循环和无限循环

死循环:一般是由写代码的人不小心造成的bug,代码一直不停的运行下去

无限循环:写代码的人故意让代码无限制的去执行,代码一直不停的运行下去

无限循环的使用场景:在书写循环的时候,不确定循环要执行多少次

无限循环的使用一般会在循环中添加一个 if 判断,当 if 条件成立,使用关键字break来终止循环

break和continue

break和continue是python中的两个关键字,只能在循环中使用

break:终止循环,即代码不再执行,立即结束

continue:跳过本次循环,即本次循环剩下的代码不再执行,继续下一次循环

容器

容器也可以称为是数据序列,或者高级数据类型,也是python中的数据类型

容器中可以存放多个数据

字符串

字符串是容器,因为字符串中可以包含多个字符

使用引号(单引号、双引号、三引号和特殊引号)引起来的内容

字符串本身包含单引号,则在定义的时候不能使用单引号,可以使用双引号或转义字符\\

下标(索引):就是指字符在字符串中的位置编号,这个编号就是下标

这个编号一般来说都是从左到右进行编号的,从0开始的(python中支持负数下标,从右到左进行编号,从-1开始,倒数第二个为-2)

下标作用:可以使用下标获取字符串中某个位置的字符

字符串的查找方法 find

语法:字符串.find(sub_str,start,end)

        sub_str:要查找的子字符串

        start:开始位置,从哪个下标位置开始查找,一般不写,默认为0

        end:结束位置,查找到哪个下标结束,一般不写,默认是len()

作用:在字符串中查找是否存在 sub_str 这样的子字符串

返回: 

        如果找到了子字符串,返回子字符串第一次出现的下标

        如果没有找到,返回 -1

字符串的替换 replace

语法:字符串.replace(old_str,new_str,count)

        old_str:被替换的内容

        new_str:新的内容

        count:替换的次数,一般不写,默认是全部替换

返回:替换之后的完整的字符串,注意(原来的字符串没有发生改变)

字符串的拆分 split

语法:字符串.split(sep,max_split)

        sep:字符串按照什么进行拆分,默认为空白字符

        max_split:分割次数,一般不写,全部分割

        返回:将一个字符串拆分为多个,存到列表中

        注意:若sep不写,想要指定分割次数,则为字符串.split(max_split=n)

字符串的连接 join

语法:需要连接的字符串.join(列表)

作用:将需要连接的字符串插入到列表中每相邻的两个数据之间,组成一个新的字符串

        列表中的数据是使用逗号隔开的

        列表中的数据必须都是字符串,否则会报错

切片

切片:可以获取字符串中多个字符(多个字符的下标是有规律的,等差数列)

语法:字符串[start:end:step]

        start是开始位置的下标,end是结束位置的下标(注意,不能取到这个位置的字符),step是步长,等差数列的差值,所取的相邻字符下标之间的插值,默认是1,可以不写

特殊应用:步长为负数,开始和结束不写,为反转(逆置)字符串

列表

列表 list ,是使用最多的一种容器(数据类型)

列表中可以存储多个数据,每个数据之间使用逗号隔开

列表中可以存放任意类型的数据

语法:

        类实例化的方式(不常用)

                定义空列表:变量=list()

        直接使用[]进行定义(常用)

                定义空列表:变量=[]

列表支持下标和切片

使用方法和字符串中的使用方法一致

区别:列表的切片得到的是列表

查找列表中数据下标的方法

在字符串中使用的find方法查找下标,不存在返回的是-1

在列表中没有find方法,想要查找数据的下标,使用的是index方法

语法:列表.index(数据,start,end)

        使用和find一样,同时在字符串中也有index方法

        区别:返回,index()方法,找到返回第一次出现的下标,没有找到则代码直接报错

查找-判断是否存在

判断容器中某个数据是否存在可以使用 in 关键字

数据 in 容器 

若存在返回True,不存在返回False

查找-统计出现的次数

统计出现的次数,使用的是 count()方法

列表.count(数据) 

返回数据出现的次数

添加数据的方法

尾部添加(最常用)

列表.append(数据) 将数据添加到列表的尾部

返回:返回的None(关键字),一般就不再使用变量来保存返回的内容,想要查看添加后的列表,需要打印的是列表

指定下标位置添加

列表.insert(下标,数据) 在指定的下标位置添加数据,如果指定的下标位置本来有数据,原数据会后移

返回:返回的None(关键字),一般就不再使用变量来保存返回的内容,想要查看添加后的列表,需要打印的是列表

列表合并

列表1.extend(列表2)  将列表2中的所有数据逐个添加到列表1的尾部

返回:返回的None(关键字),一般就不再使用变量来保存返回的内容,想要查看添加后的列表,需要打印的是列表

修改操作

想要修改列表中的指定下标位置的数据,则列表[下标] = 数据

注意:字符串中字符不能使用下标修改

删除操作

在列表中删除中间的数据,后面的数据会向前移动

根据下标删除

列表.pop(下标)  删除指定下标位置对应的数据

        下标不写,默认删除最后一个数据(常用)

        书写存在的下标,删除对应下标位置的数据

返回:返回删除的数据

根据数据值删除

列表.remove(数据值)

        注意:只能删除第一个,如果删除的数据不存在,会报错

返回:None

清空数据(一般不用)

列表.clear()

列表的反转(倒置)

字符串中反转导致:字符串[::-1]

列表中反转和倒置:

        1.列表[::-1]   使用切片的方法,会得到一个新列表,原列表不会发生改变

        2.列表.reverse()  直接修改原列表,返回None

列表的复制

将列表中的数据复制一份,给到一个新的列表

1.使用切片  变量=列表[:]

2.使用copy方法    变量 = 列表.copy()

列表的排序

列表的排序,一般来说都是对数字进行排序

列表.sort()  按照升序排序,从小到大

列表.sort(reverse=True)  降序排序,从大到小

列表的嵌套

列表嵌套,列表中的内容还是列表

使用下标来确定获取的是什么类型的数据,然后确定可以继续进行什么操作

列表去重

列表去重:列表中存在多个数据,去除列表中重复的数据

方式1:遍历原列表中的数据判断在新列表中是否存在,如果不存在放入新的列表中

方式2:在python中有一种数据类型(容器),称为是集合(set),可以使用集合的特点对列表去重

        集合的特点:集合中不能有重复的数据(如果有重复的数据会自动去重)

        方式2的缺点:不能保证数据在原列表中出现的顺序

元组

元组:tuple,元组的特点和列表非常相似

        1.元组中可以存放任意类型的数据

        2.元组中可以存放任意多个数据

区别:

        1.元组中的数据内容不能改变,列表中的可以改变

        2.元组使用(),列表使用[ ]

应用:在函数的传参或者返回值中使用,保证数据不会被修改

定义

1.使用类实例化的方式

2.直接使用()方式

注意:定义只有一个数据的元组时,数据后边必须有一个逗号

常用方法

由于元组中的数据不能修改,所以只有查看的方法

1.在元组中可以使用下标和切片获取数据

2.在元组中存在 index 方法

3.在元组中存在 count 方法

4.在元组中可以使用 in 方法

以上方法的使用,与列表一样

字典

1.字典dict,字典中的数据是由键(key)值(value)对组成的(键表示数据的名字,值是具体的数据)

2.在字典中一组键值对是一个数据,多个键值对之间使用逗号隔开

        变量 = {key:value,key:value}

3.一个字典中的键是唯一的,不能重复的,值可以是任意数据

4.字典中的键一般都是字符串,可以是数字,不能是列表

定义

1.使用类实例化的方法

        dict()不能转列表、元组和字符串

2.直接使用{}定义

增加和修改操作

语法:字典[键] = 数据值

注意:1.如果键已经存在,就是修改数据值

           2.如果键不存在,就是添加数据(即添加键值对)

删除操作

删除指定键值对:

        del 字典[键]

        字典.pop(键)

清空:字典.clear()

查询-根据键获取对应的值

字典中没有下标的概念,想要获取数据值,要使用key(键)来获取

1.使用字典[键]

        如果键存在,返回键对应的数据值

        如果键不存在,会报错

2.使用字典.get(键,数据值)

        数据值一般不写,默认是None

        返回:如果键存在,返回键对应的数据值;如果不存在,返回的是括号中书写的数据值(None)

遍历

对字典的键进行遍历

for 变量 in 字典        

for 变量 in 字典.keys()

对字典的值进行遍历

for 变量 in 字典.values()

对字典的键值对进行遍历

for 变量1,变量2 in 字典.items()

容器部分总结

1.字符串,列表,元组支持加法运算

2.字符串,列表,元组支持乘一个数字

3.len()在容器中都可以使用

4.in 关键字在容器中都可以使用,注意,在字典中判断的是字典的键是否存在

函数

1.函数就是把具有独立功能的代码块组织为一个小模块,在需要的时候调用

2.函数,通俗理解,将多行代码写在一块,起个名字,在需要这多行代码的时候,可以直接使用这个名字来代替

3.函数的好处:减少代码的冗余,提高程序的编写效率

定义

1.将多行代码放在一块,起名字的过程,称为函数定义

2.函数必须先定义后调用

语法:

def 函数名():

        函数中的代码

        函数中的代码

注意:

        def是关键字,用来定义函数的(define的缩写)

        函数名需要遵守标识符的规则

        处于def缩进中的代码,称为函数体

        函数定义的时候,函数体中的代码不会执行,在调用的时候才会执行

调用

使用多行代码的时候,称为函数调用

语法:函数名()

注意:

        函数调用的时候会执行函数体中代码

        函数调用的代码命令,要写在函数体外边

函数的嵌套调用

在一个函数定义中调用另一个函数

注意:

1.函数定义不会执行函数体中的代码

2.函数调用会执行函数体中的代码

3.函数体中代码执行结束会回到函数被调用的地方继续向下执行

函数的参数

函数参数:在函数定义的时候,使用变量代替具体的数据值(进行占位),在函数调用的时候,传递具体的数据值

函数传参的方式

位置传参:在函数调用的时候,按照形参的顺序,将实参值传递给形参

关键字传参:在函数调用的时候,指定数据值给到那个形参

混合使用:

        1.关键字传参必须写在位置传参的后面

        2.不要给一个形参传递多个数据值

默认参数(缺省参数)

定义方式:在函数定义的时候,给形参一个默认的数据值,这个形参就变为缺省参数,注意,缺省参数的书写要放在普通参数的后边

特点:缺省参数在函数调用的时候,可以传递实参值,也可以不传递实参值;如果传参,使用的就是传递的实参值,如果不传参,使用的就是默认值

多值参数(可变参数/不定长参数)

当在书写函数的时候,不确定参数的具体个数时,可以使用不定长参数

不定长位置参数(不定长元组参数)

1.在普通参数的前边,加上一个*,这个参数就变为不定长位置参数

2.特点:这个形参可以接收任意多个位置传参的数据

3.数据类型,形参的类型是元组

4.注意,不定长位置参数要写在普通参数的后面

5.一般写法,不定长位置参数的名字为args

不定长关键字参数(不定长字典参数)

1.书写,在普通参数的前边加上两个**,这个参数就变为不定长关键字参数

2.特点,这个形参可以接收任意多个关键字传参的数据

3.数据类型,形参的类型是字典

4.注意,不定长关键字参数要写在所有参数的最后边

5.一般写法,不定长关键字参数的名字为kwargs

完整的参数顺序

def 函数名(普通函数,*args ,缺省参数,**kwargs):

        pass

一般在使用的时候,使用1-2种,按照这个顺序挑选书写即可

注意:

1.想要将列表(元组)中的数据分别作为位置参数,进行传参,需要对列表进行拆包操作(*列表名)

2.想要将字典中的数据,作为关键字传参,需要使用**对字典进行拆包(**字典名)

函数的返回值

函数的返回值可以理解为是函数整体执行的结果是什么

什么时候需要书写返回值:函数中得到的数据在后续的代码中还要使用,这个时候就应该将这个数据作为返回值返回,以供后续使用

在函数中想要将一个数据作为返回值返回,需要使用return关键字(这个关键字只能在在函数中使用)

return作用:将数据值作为返回值返回;函数代码执行遇到return,会结束函数的执行

返回值的说明

返回多个数据值:将多个数据值组成容器进行返回,一般是元组(组包)

匿名函数

匿名函数:就是使用lambda关键字定义的函数

一般称为使用def关键字定义的函数为标准函数

匿名函数只能书写一行代码

匿名函数的返回值不需要return,一行代码(表达式)的结果就是返回值

语法结构:  lambda 参数:一行代码

匿名函数一般不需要主动的调用,一般作为函数的参数使用

如果想要调用匿名函数:在定义的时候,将匿名函数的引用保存到一个变量中,使用变量进行调用

匿名函数作为函数的参数-列表中的字典排序

思路:匿名函数中的参数是列表中的数据,在sort函数内部,会调用key这个函数(将列表中每个数据作为实参传递给形参)

语法:列表名.sort(key=lambda x:x['键'])

ord(字符) 获取字符对应的ASCII值

chr(ASCII值)获取对应的字符

变量进阶

这一部分主要是了解python底层是如何处理数据的

变量的引用

1.在定义变量的时候 变量 = 数据值,python解释器会在内存中开辟两块空间

2.变量和数据都有自己的空间

3.日常简单理解,将数据保存到变量的内存中,本质是将数据的地址保存到变量对应的内存中

4.变量中存储数据地址的行为就是引用(变量引用了数据的地址,简单说就是变量中存储数据),存储的地址称为引用地址

5.可以使用id()来获取变量中的引用地址(即数据的地址),如果两个变量的id()获取的引用地址一样,即代表着,两个变量引用了同一个数据,是同一个数据

6.只有赋值运算符=,可以改变变量的引用(等号左边数据的引用)

7.python中数据的传递,都是传递的引用

可变类型和不可变类型

可变不可变是指:数据所在的内存是否允许修改,允许修改就是可变类型,不允许修改就是不可变类型(不使用=,变量引用的数据中的内容是否会变化,会变化是可变的,不会变化是不可变的)

可变类型:列表list、字典dict、集合set

不可变类型:int、float、bool、str、tuple

组包和拆包

组包(pack):将多个数据值使用逗号连接,组成元组

拆包(unpack):将容器中的数据值使用多个变量分别保存的过程,注意,变量的个数和容器中数据的个数要保持一致

局部变量和全局变量

变量:根据变量的定义位置,可以将变量分为局部变量和全局变量

局部变量

局部变量:在函数内部定义的变量,称为是局部变量

特点:

        1.局部变量只能在当前函数内部使用,不能在其他函数和函数外部使用

        2.在不同函数中,可以定义名字相同的局部变量,两者之间没有影响

        3.生存周期(生命周期,作用范围):在函数被调用的时候,局部变量被创建,函数调用结束,局部变量的值被销毁(删除),不能使用

函数中的局部变量的值,如果想要在函数外部使用,需要使用return关键字,将这个值进行返回

全局变量

定义位置:在函数外部定义的变量,称为是全局变量

特点:

        1.可以在任何函数中读取(获取)全局变量的值

        2.如果在函数中存在和全局变量名字相同的局部变量,在函数中使用的是局部变量的值(就近)

        3.在函数内部想要修改全局变量的引用,需要添加global关键字,对变量进行声明为全局变量

        4.生命周期:代码执行的时候被创建,代码执行结束被销毁(删除)

面向对象

面向对象是一个编程思想(写代码的套路)

面向对象和面向过程都属于写代码的方法,最终目的是为了将代码书写出来,只不过过程和思考方法不一样

面向过程关注的是具体步骤的实现,所有的功能都是自己书写;定义一个个函数,最终按照顺序调用函数

面向对象关注的是结构,谁(对象)能帮我做这件事;找一个对象,让对象去做

类和对象

面向对象的核心思想是找一个对象去帮我们处理事情

在程序代码中,对象是由类创建的

类和对象是面向对象编程思想中非常重要的两个概念

类是抽象的概念,对多个特征和行为相同或者相似事物的统称

泛指的,指代多个,而不是具体的一个

类的组成

类名(给这多个事物起一个名字,在代码中满足大驼峰命名法(每个单词的首字母大写))

属性(事物的特征,一般文字中的名词)

方法(事物的行为,即做什么事,一般是动词)

类的抽象(类的设计)

类的抽象其实就是找到类的类名,属性和方法

对象

具体存在的一个事物,看得见摸得着的

特指的(指代一个)

面向对象代码的书写步骤

1.定义类,在定义类之前先设计类

在python中定义类需要使用关键字 class

方法:方法的本质是在类中定义的函数,只不过第一个参数是self

对self的说明:

        从函数的语法上讲,self是形参,就可以是任意的变量名,只不过习惯性将这个形参写作self

        self是普通的形参,但是在调用的时候没有传递实参值,原因是,python解释器在执行代码的时候,自动的将调用这个方法的对象传递给了self,即self的本质是对象

        验证,只需要确定通过哪个对象调用,对象的引用和self的引用是一样的

        self是函数中的局部变量,直接创建的对象是全局变量

class 类名:

        #在缩进中书写的内容,都是类中的代码

        def 方法名(self):

                pass

2.创建对象,使用第一步定义的类型创建对象

创建对象是使用类名()进行创建

一个类可以创建多个对象,只要出现类名()就是创建一个对象,每个对象的地址是不一样的

3.通过对象调用方法

对象.方法名()

对象的属性操作

添加属性

对象.属性名=属性值

类内部添加:在内部方法中,self是对象,即self.属性名=属性值

类外部添加:对象.属性名=属性值(一般不使用)

获取属性

对象.属性名

类内部获取:self.属性名

类外部获取:对象.属性名(一般不使用)

魔法方法

python中有一类方法,以两个下划线开头,两个下划线结尾,并且在满足某个条件的情况下,会自动调用,这类方法称为魔法方法

__init__方法

什么情况下自动调用:创建对象之后会自动调用

有什么用,用在哪:给对象添加属性的(初始化方法,构造方法);某些代码,在每次创建对象之后都要执行,就可以将这行代码写在__init__方法

__str__方法

什么情况下自动调用:使用print()打印对象的时候,会自动调用

有什么用,用在哪:在这个方法中一般书写对象的属性信息,即打印对象的时候想要查看什么信息,在这个方法中进行定义的;如果类中没有定义__str__方法,print()默认输出对象的引用地址

书写注意事项:必须返回一个字符串

__del__方法(了解)

__del__方法:对象被删除销毁时,自动调用的

调用场景:程序代码运行结束,所有对象都被销毁

如果直接使用del删除对象(若对象有多个名字(多个对象引用一个对象),需要把所有的对象都删除才行)

赞(0)
未经允许不得转载:171主机测评 » Python笔记(软件测试学习)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址