欢迎关注公众号 学习资料不会少

5.3.2 类

1

类的基础知识

说到类,就不得不提面向过程编程和面向对象编程。下面用两个例子说明这两种编程方式在编码上的区别,如图5-3-9和图5-3-10所示。

▲图5. 3. 9 案例1

▲图5-3-10 案例2

(1) 在面向对象编程中最重要的概念是类(Class) 和实例(Instance) 。

(2) 类是抽象的模板,可以将其理解为一个基础模板,比如Student类。而实例是根据类创建出来的一个具体对象。

“物以类聚,人以群分”, 可以从这句话来理解编程中的类。类应该是有共同特点的事物的集合,比如人类、动物类。类中的对象应该有共同的特点,而这些特点对应编程中的类的共同属性和方法。而具体的对象之间又或多或少有差别,比如在“鸟”这个类中,每只鸟又有自己的特点。

(3) 每个对象都拥有相同的方法,但各自的数据可能不同。

每个对象都拥有相同的方法,实例拥有类中所有的方法;无论实例的名称如何不同,他们的方法都是一样的。比如,类是 Student, 那么不管是实例 lilei, 还是实例hanmeimci,只要它们都是 Student的实例,它们所拥有的方法都是相同的。

每个实例的数据可能不同,这是因为在使用实例时,如果需要在这个类中传入参数作为初始数据,那么每个实例可能会被传入不同的(或者相同的)数据。比如数据库类,如果传入的是不同的数据库连接串,则实例的数据就不同了。

2

类的使用

(1) 在Python中,定义类是通过class关键字来实现的:

class Student(object):

Pass

● class 后面紧接着是类名,即Student.类名通常采用单词首字母大写的形式命名,比如 StudentCore。

● (object) 表示该类是从哪个类继承来的。如果没有合适的继承类,则通常使用 object 类,这是所有类都会继承的类。

(2) 实例化一个类是通过在类名后面加小括号“()”来实现的:

pupil=Student ()

● “小学生”是“学生”这个的一个实例。所谓实例,可以将其理解为类的化身。类不能被直接使用,只能先将其实例化,然后用实例代表类,进而调用类中的方法处理数据。那么实例是怎么代表类的呢?在定义类及其方法时,有一个参数叫self, 它就是串联实例与类之间的关键参数,可以简单地理解为“self=实例名”。

● 类的下面有属性和方法。可以将属性理解为静态的数据,将方法理解为动态的处理函数。比如,在下面的代码中定义了“学生”类,其中_ _init_ _是属性,print_score 是方法。

#-*-coding:utf-8-*

Class Student (object) :

def _ _ init_ _ (self,name,score) :

self.name= name

self.score=score

def print_score (self) :

print ('%s: %s'% (self. _ _name,self. _ _acore) )

(3)实例化上面的类,然后分析Python 如何利用实例化类调用类中的方法。

完整的实例化类与调用过程如下:

pupil=student (name='lilei',score=99)

pupil.print_score ()

按照前面的说法,self=实例名,那么 pupil=Student (name='lilei',score=99) , 实例化类的第一步是执行 _ _init_ _ 语句,即 Student (self='pupil',name='lilei',score=99) , 则可知pupil.name='lilei',pupil.score=9.实例化类的第二步是执行 pupil.print_score () 语句,调用实例的方法就是调用类的方法,而这个方法是按照格式打印出

pupil.name:pupil.score,mlilei: 99。

3

类的优势

(1) 类的访问限制。

所谓类的访问限制,即在类的外部不能直接调用类中的数据。在 Python 中,在变量前加“_ _”可将变量置为私有变量,使其只能在类中被使用,不能被类之外的其他函数(方法)调用。下面代码中的name 参数表示的就是私有变量。

#-*-coding:utf-8-*-

#_ _author_ _='大婶N72’

class Student (object) :

def _ _init_ _(self,name,score) :

self._ _name= name

self.score= score

def print_score (self) :

print ('%s: %S'% (self._ _name,self._ _score) )

MeiMei=Student ('hello', 99)

print (MeiMei.score)

print (MeiMei. _ _name)

代码的运行结果很好地佐证了加了“_ _”的参数是不能被调用的,没加“_ _”的参数是可以直接被调用的,如图5-4-11所示。

C:\Python36\python3. exe F:/Autotest_interface_demo/test. py

99

Traceback (most recent call last):

File "F:/Autotest interface demo/test.py”, line 12, in

print (MeiMei._name)

AttributeError: ' Student' object has no attribute'__name’

Process finished with exit code 1

▲图5-3-11 代码的运行结果

(2) 类的继承。

所谓“继承”, 从字面上看很好理解:如果一个类继承了另外一个类,则这个类就有了被继承的类的所有方法和属性。我们可以直接使用这些方法和属性,无须再单独写。下面举一个例子来解释什么是继承。类的基本定义如下:

# -*- coding:utf-8 -*-

# _ _author_ _=‘大婶N72’

# 父类

class Parent (object) :

def print_self (self) :

return “我是父类”

# 子类继承父类

class Student (Parent) :

def_ _init_ _ (self,name,score) :

self. _ _name= name

self.score=score

def print_score (self) :

print ('%s: %s'% (self. _ _name,self. _ _score) )

MeiMei=Student ('hello', 99)

print (MeiMei.score)

#直接在子类中使用父类的方法

print (MeiMei.print_self ()

在上面的例子中,子类 Student 继承了父类 Parent.方法是在类名称后面的小括号中加上父类的名称。子类继承了父类,则有了父类 Parent 的方法 print_self, 从而可以直接在自己的实例名中使用。

(3) 类的多态。

如果子类继承了父类,但是又想改变父类的方法,则这时无须修改父类的方法,只需要在子类中添加相同的方法名就可以起到覆盖的作用,这就是多态。

# -*- coding:utf-8 -*-

# _ _author_ _='大婶N72'

#父类

class Parent (object) :

def print_self (self) :

return"我是父类"

#子类继承父类

class Student (Parent) :

def _ _init_ _ (self,name,score) :

self. _ _name= name

self.score=score

def print_score (self) :

print ('%s: %S'% (self. _name,self. _ _score) )

def print_self (self) :

return"我是子类"

MeiMei=Student ('hello', 99)

print (MeiMei.score)

#子类的方法覆盖父类方法

print (MeiMei.print_self () )

5. 3. 3 条件判断

Python 程序在运行后之所以能够得到不同的结果,是因为根据不同的条件执行了不同的语句。条件判断是Python 程序运行的基本逻辑之一。比如,根据不同的分数显示不同的等级,在Python 程序中可用下列if语句来实现:

# -*-coding:utf-8-*_

# _ _author_ _='大婶N72’

score=90

if score> =90:

print ("A")

在上面的代码中,如果 score 大于或等于90, 则使用 print 函数输出“A”这个字付。注意,f 语句后面是冒号,在其条件为“真”时,才会执行置号后面的语句,所以上面的代码的输出结果是“A”。当然,完整的 if 语句肯定不会这么简单,例如下面的代码增加了一些判断条件:

# -*-coding:utf-8-*-

# _ _author_ _='大婶N72’

score=60

if score> =90:

print ("A")

else:

print ("非A")

在上面的代码中,增加了 else 语句及其后面要执行的语句。else的意思是“否则”,即不满足其前面所有的if条件时就执行else 后面的语句,而else 后面是没有其他限制条件的,上面代码的输出结果是“非A”。下面通过elif语句再增加一些判断条件。

#-*-coding:utf-8-*-

# _ _author_ _='大婶N72'

score=87

if score==100:

print ("满分")

elif 90 <=score <100:

print ("A")

elif 70 <=score <90:

print ("B")

elif 60 <=score <70:

print ("C")

elif score> 100 or score <0:

print ("别扯了")

else:

print(“不及格”)

elif 其实是 else···if, 即“否则······如果”,增加elif就足再增加一种判断情况语句是允许有多个条件存在的。在不出现异常的情况下,程序会按照顺序从上往下判断,直到else.在这个过程中,如果哪个判断条件成立,则执行该条件下的语句。

总结一下,if条件判断语句的语法机制是:

# -*- coding:utf-8 -*-

# _ _author_ _='大婶N72'

If :

elif :

elif :

else:

备注:这里提到条件判断语句成立(即为 True) , 那么在Python 3中哪些情况是 True 呢?除日常的真假判断外,在Python3中还有一些特殊的数据类型能代表 True 和 False.

但是不建议用特殊的符号来判断,因为其易读性不好。下面是判断真假的几种情况:

#-*-coding:utf-8 -*-

# _ _author_ _='大婶N72'

#假:[] , { },0,0.0,None,False,""

#真:1, "TEST"

If "":

print ("真")

else:

print ("假”)

5.3.4 异常处理

简单的异常处理主要依靠内置异常处理结构体和logging日志,代码结构如下:

import logging

try:

...

except ValueError as e: #异常判断,出现ValueError 错误时处理机制

except.Zerob1v1sionError as e: #异常判断,出现zeropivialonError 精误时处理机制

logging.exception (e)

finally:

...

下面的例子解释了“内置异常处理结构休+logging日志”是如何捕获异常情况的:

# -*- coding:utf-8 -*-

import logging

class Test (object) :

def _init_ (self,num) :

self.num=num

def unnormal (self) :

try:

print ('开始测试异常情况')

r=10/self.num

print ('result: ',r)

except TypeError as e:

print ('TypeError: ',e)

except ZeroDivisionError as e:

logging.exception (e)

finally:

print ('finally finish! ')

读者可以分别使用以下的实例化传参来测试异常处理机制:

if _name_=="_main_":

op_test1=Test (num=2)

op_test1.unnormal ()

op_test2=Test (num="test")

op_test2.unnormal ()

op_test3=Test (num=0)

op_test3.unnormal()

5.3.5 Python3代码注释

注释就是一段解释,可以起到备注的作用。在团队合作中,每个人编写的代码经常会被多人调用,为了让别人能更容易理解代码,非常有必要使用注释。在每个py开头加上代码功能的注释,这样,其他人看到注释就大概知道该py文件所实现的功能和调用方式了。所以,读者需要养成注释的习惯并使用规范的注释方式。

在 Python 中,代码的注释方式有两种-单行注释和多行注释。

● 单行注释:“#”符号常被用来对单行文字或代码做注释。使用“#”时,它右边的任何数据都被当作是注释。比如:

# -*- coding:utf-8 -*-

# _ _author_ _='大婶N72'

’’’

print ("Hello, World! ")

print ("I'm fine! ")

print ("thank you! ")

’’’

print ("Hello, World! ")

print ("I'm fine! ")

print ("thank you! ")

”””

在PyCharm 工具中,可以使用快捷键很方便地添加注释和取消注释(快捷键是“Ctrl+? ”) .将鼠标光标移动到需要加注释的语句上,按“Ctrl+? ”键即可添加或删除“#”。

而对于多行注释,在输入三个单引号“‘‘‘”或者三个双引号““““”时,会自动关联出另一对三个单引号“’’’”或者三个双引号“””””。

往期精彩文章

喜报来了!凡猫学员薪资最高16K!

金融行业软件测试介绍

2020年为什么大家都开始学习自动化测试?

学习测试开发前 你需要掌握的python 代码水平

1万+软件测试人员都在学的精品课程免费送,大家别错过

python创建学生类和教师类_python基础知识 ——类相关推荐

  1. python定义一个list数据来源于变量_python基础知识4--数据类型与变量

    阅读目录 一.变量 二.数据类型 2.1 什么是数据类型及数据类型分类 2.2 标准数据类型: 2.2.1 数字 2.2.1.1 整型: 2.2.1.2 长整型long: 2.2.1.3 布尔bool ...

  2. python 类 对象 知乎_python基础知识:类,对象,模块三者的区别

    长话短说,我线代作业还没有写呢. 有点编程语言知识的朋友应该知道,编程语言有"面向对象"和"面向过程"两种. 解释一下:面向对象技术是目前流行的系统设计开发技术 ...

  3. 简述python定义中的五个要点_Python基础知识复习

    1. 切片操作三个参数的意义: 切片是 Python 序列的重要操作之一,适用于列表.元组.字符串. range 对 象等类型. 切片使用 2 个冒号分隔的 3 个数字来完成 ,第一个数字表示切片开始 ...

  4. python标识符其他部分有哪些组成_Python基础知识

    一般来说高级编程语言的基础都包括如下部分: 1.关键字 2.标识符 3.注释 4.常量与变量 5.运算符 6.语句 7.数组 8.函数 如果我们能将上述这些部分都掌握,那么我们对这门编程语言就算是入门 ...

  5. 视频教程-快速入门Python基础教程_Python基础知识大全-Python

    快速入门Python基础教程_Python基础知识大全 十余年计算机技术领域从业经验,在中国电信.盛大游戏等多家五百强企业任职技术开发指导顾问,国内IT技术发展奠基人之一. 杨千锋 ¥99.00 立即 ...

  6. 第二十九节:Java基础知识-类,多态,Object,数组和字符串

    前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...

  7. python创建学生类和教师类_创建StudentServices类

    跟着王进老师学开发Python系列课程: 课程从0开始,讲到人工智能:按阶段授课,从基础到跑路: 适合无基础的小白,也适合定制,需要哪个模块学哪个模块: 包含Python语法,Django,爬虫,My ...

  8. python的类中包含什么_Python中的类(中)

    上一篇介绍了Python中类相关的一些基本点,本文看看Python中类的继承和__slots__属性. 继承 在Python中,同时支持单继承与多继承,一般语法如下: classSubClassNam ...

  9. python定义一个dog类 类属性有名字_python 基础 12 初识类,类方法,类属性

    python 基础 12 初识类,类方法,类属性 # 面向过程 : 想要一个结果 写代码 实现计算结果 # 面向对象开发 : 有哪些角色 角色的属性和技能 两个角色之间是如何交互的 # 复杂的 拥有开 ...

  10. python中的类属性和类方法_Python 面向对象,类的属性和 类的方法

    面向对象,类的属性和 类的方法 面向对象 类和对象 Python类定义 类属性 类方法 面向过程和面向对象 面向过程 和 面向对象 编程 面向过程 编程:函数式编程,C程序,shell等 面向对象 编 ...

最新文章

  1. 四、redis的底层数据结构
  2. 谨慎能捕千秋蝉(二)——CSRF
  3. java新建常量_【Java】常量 - 每日坚果的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. PicGo github配置
  5. Apache JMeter 字体、字体大小修改
  6. 读《程序是怎样跑起来的》第三章有感
  7. Kafka是什么、主要应用在什么场景?
  8. win10语音语言服务器,win10系统:朗读女语音库(发音人)安装方法说明
  9. tomcat vue 不用 前后端_部署前后端分离项目(后端 tomcat 前端 nginx)
  10. 利用Python制作一个“电子记事本”
  11. zabbix使用ipv6地址监控snmp客户端
  12. Random在java中怎么用_java中random()函数用法介绍
  13. cuda历史版本下载
  14. .bin文件的反汇编记录
  15. 服务器配置Python环境全过程
  16. 客户机网络打印不能打印必须重启才能打印一次等假死现象的解决方法
  17. android4.0root,最强大一键ROOT 轻松搞定安卓4.0
  18. 计算机丢失lame,libmp3lame64.dll
  19. 五星大饭店完整剧情,五星大饭店(完整集数)在线观看
  20. 三端稳压管反向击穿情况及分析与防护措施

热门文章

  1. 概率分布与马尔科夫链的关系讨论(上传费事)
  2. EF并非我们想象的那么智能
  3. HDOJ1181变形课 深搜回溯
  4. Visual Studio 单元测试之六---UI界面测试
  5. WPF/Silverlight 控件的几幅继承关系图
  6. CMake语法及CMakeList.txt简单使用
  7. Docker详解(十)——Docker容器CPU资源限额配置
  8. VXLAN配置实例(四)——VXLAN多租户网络隔离
  9. 如何查看redhat社区的solution(或者订阅);redhat内容不全
  10. 中国HBase技术社区第十届meetup--HBase生态实践 (杭州站)...