Python程序设计课件 第五章 类_第1页
Python程序设计课件 第五章 类_第2页
Python程序设计课件 第五章 类_第3页
Python程序设计课件 第五章 类_第4页
Python程序设计课件 第五章 类_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python程序设计

第五章类本章知识点导图

面向对象编程——ObjectOrientedProgramming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。

类(Class),也即面向对象。简单地说,可以把它理解为“物以类聚”,即有相同的功能特性。“类”好似图纸、模具,另一方面又可以理解为是功能(函数)的组合。类的定义Python中的类(Class)是一个抽象的概念,这也是Python的核心概念,可以把它简单看作数据以及由存取、操作这些数据的方法所组成的一个集合。函数的作用就是重复利用代码,那为什么还要另外再定义类这个概念呢?类有以下优点:(1)类对象是多态的:也就是多种形态,这意味着我们可以对不同的类对象使用同样的操作方法,而不需要额外写代码。(2)类的封装:封装之后,可以直接调用类的对象,来操作内部的一些类方法,不需要让使用者看到代码工作的细节。(3)类的继承:类可以从其他类或者元类中继承它们的方法,直接使用。定义类(class)的语法:classNameClass(object):deffname(self,name):=name第一行语法是class后面紧接类的名称,最后带上“:”。类的名称首字母最好大写,以区别函数。第二行开始是类的方法,和函数非常相似,但是与普通函数不同的是,它的内部有一个“self”参数,它的作用是对对象自身的引用。以一个例子来说明面向过程和面向对象在程序流程上的不同之处。假设要处理学生的成绩表,输出学生的成绩,面向过程的程序可以通过函数来实现,比如打印学生的成绩:In[1]:defprint_score(name,score):

...:print('{0},{1}'.format(name,score))In[2]:print_score("张三",80)

张三,80

如果采用面向对象的程序设计思想,我们首选思考的不是程序的执行流程,而是Student这种数据类型应该被视为一个对象,这个对象拥有name和score这两个属性(Property)。如果要打印一个学生的成绩,首先必须创建出这个学生对应的对象,然后给对象发一个print_score消息,让对象自行把自己的数据打印出来。In[3]:classStudent(object):

...:def__init__(self,name,score):

...:=name

...:self.score=score

...:defprint_score(self):

...:print('{0},{1}'.format(,self.score))给对象发消息实际上就是调用对象对应的关联函数,我们称之为对象的方法(Method)。面向对象的程序写出来如下:In[4]:bart=Student('BartSimpson',59)

...:lisa=Student('LisaSimpson',87)

...:bart.print_score()BartSimpson,59

In[5]:lisa.print_score()LisaSimpson,87类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数,但是在调用此方法的时候,不用为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,它就是self。类的创建创建类的方法跟自定义函数类似,但有区别,具体如下:1、创建类要用class引出;2、类的名称首字母要大写;3、类中的功能函数都需要有一个self参数;4、参数传进类内需要用self.来接收,如接收参数a的值为self.a=a;5、类中的属性和参数在引用时要在其前加self.。在类中有一些固定的参数,称为属性;类内的函数称为方法。【例5-1】创建一个Peo类。In[6]:classPeo:

...:def__init__(self,name,age,sex):

...:self.Name=name

...:self.Age=age

...:self.Sex=sex

...:defspeak(self):

...:print("myname:%s"%self.Name)这个类首先写了一个特定的方法__init__()用来传递参数,它将name、age、sex三个参数值赋给了self.Name、self.Age、self.Sex。其实self.Name、self.Age、self.Sex这三个参数名称不一定非得跟name、age、sex一致,如self.Name也可以随便命名为self.xm或者self.abc都可以,只是为了方便识别、记忆,所以一般情况下还是对应比较方便。但是self.是必须有的且不能被改变。Peo类中的speak()是一个类内函数,即方法。类内函数都必须带有参数self,而且必须作为其第一个参数。

创建类时,只要创建了名为__init__()的特定方法,在实例化这个类时就会运行这个方法。由于__init__()方法可以传递参数,所以创建对象时就可以把属性设置为我们希望的值,__init__()这个方法会在创建对象时完成初始化。

实例化Peo类的对象。In[7]:zhangsan=Peo("zhangsan",24,'man')

...:print(zhangsan.Age)24

In[8]:print(zhangsan.Name)zhangsan

In[9]:print(zhangsan.Sex)man

In[10]:zhangsan.speak()myname:zhangsan

和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量

self,并且调用时不用传递该参数。除此之外,类的方法和普通函数区别不大。因此,参数仍然可以使用默认参数、可变参数、关键字参数和命名关键字参数等方式。参数的传递

类像函数一样,可以接收传递参数。类的参数可以在__init__()方法中传入,也可以在其方法中传入,如下面的例子中__init__()传入name参数,在tall()中传入身高参数high。下面的例5-2创建了一个类名为Person,里面有两个属性x和y,x是一个数组,y是字符串。Person还创建有5个方法(子函数)。【例5-2】类的参数传入方式。In[11]:classPerson:...:"""...:这是一个类,举例说明了如何传入参数和创建各种功能。...:"""...:x=(1,2,2)...:y="这是一个关于类的属性和方法的应用案例,类名为Person。"...:...:def__init__(self,name):...:=name...:...:defprint(self):#每个方法(子函数)都必须要有self参数...:'''...:打印Person类的说明和固有属性...:'''...:print(self.y)...:print("人有%d张嘴,%d只眼睛,%d只手。"%(self.x[0],self.x[1],self.x[2]))...:

...:defnam(self):...:"""...:输出实例的姓名...:"""...:print("姓名:",)...:...:deftall(self,high):...:"""...:接收实例的身高参数,并打印输出...:"""...:self.high=high...:print("这是%s身高(Cm):"%,high)#此处可以直接用high...:...:definfo(self):...:print("%s的身高(Cm):%s"%(,self.high))#此处必须用self.high先实例化一个实例。In[12]:yubg=Person("余本国")In[13]:yubg.print()这是一个关于类的属性和方法的应用案例,类名为Person。人有1张嘴,2只眼睛,2只手。

In[14]:yubg.nam()姓名:余本国

In[15]:yubg.tall(170)这是余本国身高(Cm):170

In[16]:()

余本国的身高(Cm):170说明:def__init__(self,name)和deftall(self,high)都可以传入参数,但前一种方式传入的参数在实例化的时候就需要传入参数,后一种传入参数方法是在调用该方法时才传入参数。私有变量与私有方法

类可以有公有变量与公有方法,也可以有私有变量与私有方法,公有部分的对象可以从外部访问,而私有部分的对象只有在类的内部才可访问。在普通变量名或方法名(即公有变量名或方法名)前加双下划线“__”,即可成为私有变量或方法。【例5-3】类的私有变量与私有方法。具体代码如下:In[17]:classPubAndPri:...:pub="这是公有变量"...:__pri="这是私有变量"...:...:def__init__(self):...:self.other="公有变量也可这样定义"...:...:defout_pub(self):...:print("公有方法",self.pub,self.__pri)...:...:def__out_pri(self):...:print("私有方法",self.pub,self.__pri)In[18]:pp=PubAndPri()

In[19]:pp.out_pub()#访问公有方法公有方法这是公有变量这是私有变量

In[20]:print(pp.pub,pp.other) #访问公有变量这是公有变量公有变量也可这样定义

In[21]:try:...:pp.__out_pri()...:exceptExceptionase:...:print("调用私有方法发生错误!")调用私有方法发生错误!

In[22]:try:...:print(pp._pri)...:exceptExceptionase:...:print("访问私有变量发生错误!")访问私有变量发生错误!类的调用类的调用跟函数的调用一样。#file_A.py文件classAx:def__init__(self,xx,yy):self.x=xxself.y=yydefadd(self):print("x和y的和为:%d"%(self.x+self.y))下面在B.py文件中调用file_A.py文件中的类Ax中的方法add。#B.py文件:fromfile_AimportAxa=Ax(2,3)a.add()importfile_Aa=file_A.Ax(2,3)a.add()或以上函数和类的调用方法都是在同一个文件下的调用,对于不同文件下的调用时,需要进行“说明”,即需要有个“导引”,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论