欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Python程序设计案例教程第8章 Python面向对象教学课件.pptx

    • 资源ID:71826983       资源大小:23.79MB        全文页数:61页
    • 资源格式: PPTX        下载积分:30金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要30金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Python程序设计案例教程第8章 Python面向对象教学课件.pptx

    Python程序设计案例教程第8章 Python面向对象主 讲 人:X X X了解面向对象编程的概念。理解封装、继承、多态的概念。掌握Python中类的使用。能够分析问题并设计相应的类。能灵活使用系统及第三方提供的类库。01面向对象面向过程程序设计面向过程程序设计最早提出的结构化程序设计方法就是“面向过程程序设计”,其哲学就是将程序设计问题分解为描述问题的数据结构、以及解决问题的算法,该设计方法非常成功。“面向过程程序设计”很成功,那为什么还需要“面向对象程序设计”?这是因为在使用过程中发现“面向过程程序设计”有一些自身不能解决的问题,如:对大型软件项目的支持、代码的复用、数据与算法分离不符合日常思维习惯、不便于问题的分析与建模等,为了解决上述问题,又提出了“面向对象程序设计”。下边通过Python语言学习相关的概念。面向对象程序设计(面向对象程序设计(Object Oriented Programming,OOP)是一种程序设计范式。)是一种程序设计范式。类和对象类和对象 类的定义类的定义 对象创建对象创建类和对象面向对象程序设计(Object Oriented Programming,OOP)是一种程序设计范式。面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的过程中的行为。通俗一点讲,面向过程程序设计就是主要考虑解决一个问题需要哪些步骤;而面向对象程序设计主要考虑解决一个问题需要哪些角色(对象)的参与,以及它们之间应该如何交互。面向对象程序设计实现了重用性、灵活性和扩展性。在面向对象程序设计中,有两种实现对象的方式,一种是基于原型、一种是基于类。Python语言使用的是基于类的实现方式。基于类的面向对象编程语言,是构建在两个不同实体概念上,即类和对象。类(class):类是具有相同属性和方法对象的抽象描述,形象的说所谓“类”就是开发者自定义的数据类型,属性就是这个类型的具体实例都包含的数据成员,方法是实例具有的行为。对象(object or instance):对象也称为实例,它通过类定义的数据结构实例。对象包括由类中定义属性的具体值,和作用在这些具有具体值上的方法。我们需要为动物园开发一个管理动物的系统,比如说我们需要在程序中表示并处理“大象”这个种动物。大象作为一类动物,它有很多不同的个体,但是这些不同个体都具有相似的共性,也具有相似的行为。分析思路:分析思路:1.首先我们把同“大象”个体的共性提取出来,经过分析发现大象都有体重、体长等共通的属性,不同大象之间只是在这些共性的基础上有不同的取值而已,为了区别每一个大象我们还可能给大象一个编号或者名字。2.再来我们分析一下“大象”的都具有哪些共通的行为,经过分析发现大象都能进行的动作有移动、进食、休息等行为。行为都相同,只是每个行为的影响可能有差别,比如成年大象可能移动得快一些,幼年象移动的慢一些等等。我们把分析的结果用图的方式表示出来。类的定义Python中提供了定义类的专用保留字(class)用于类的定义。语法格式如下:class 类名:类成员列表class保留字说明这里的代码是要定义一个类(class),class保留字后边的类名是这个类的标识符,类型需要符合python关于标识符的要求。类名后边接冒号(:),下边一行开始就是类的成员列表,包括类成员变量、类的方法等的定义。Python中为累添加属性有两种方式,一种是通过类属性为对象添加属性;一种方式是直接通过对象来添加属性。使用对象直接添加属性往往需要和一些特殊的方法配合来使用,所以放到后边在学习了方法的定义后再许学习,这里我们先看看如何使用类属性来为对象添加属性。class 类名:属性名=初始值属性名=初始值.动物园中的每头大象,都有自己的名称、体重、体长等信息,如何使用类来管理这些信息?下边的代码展示的是通过类属性为对象添加三个属性。class elephant:name=名称#大象名称weight=重量#大象体重length=长度#大象长度dumbo=elephant()#创建一个大象类(elephant)的实例对象dumbo.name=丹波dumbo.weight=200kgdumbo.length=1mprint(dumbo.name,dumbo.weight,dumbo.length)类属性提供了统一定义对象属性的方式。但是类属性实际上不是对象的属性,而是类的属性,Python在使用类创建对象时,会拷贝一份类的属性作为对象的属性。这样就起到了定义对象属性的效果。这里要注意的是,类属性在其他语言中对应的概念是“类静态属性/类静态成员”,类属性更多的作用是存储同一个类所有对象共享的状态。要理解Python中的类属性与对象属性的关系可以参考下图。要注意的是,这个过程不是简单的拷贝属性值,而是一个比较复杂的属性查找过程,其中涉及python中类的特殊方法以及对象的特殊属性,如类的_getattribute_方法、对象的_dict_属性等,这里不再展开。为了方便理解,我们可以简化为属性值的拷贝。类方法也被称为成员函数,它实际上是一种和特定类、以及类的实例对象绑定的函数,这种函数只能在类的内部定义,并且调用时需要类的实例对象来调用,我们先看如何在类中定义方法。class 类名:def方法名称(self,参数列表):方法代码定义方法实际上就是将函数定义放在类的块中,这样函数就是成为类的方法。除此之外,方法的第一个参数一定是self参数,self参数代表类的一个具体实例,而非类本身。class elephant:name=名称weight=重量length=体长#大象类的移动方法def move(self):print(大象name正在移动.format(name=self.name)dumbo=elephant()dumbo.name=丹波dumbo.move()这里定义一个移动方法(move)。只有一个代表当前具体对象的self参数。该方法只是简单的根据当前对象的信息打印出当一段文字。这里self参数实际就是表示当前是哪个对象在调用方法,详细见后边对象章节。前边说过为对象添加属性有两种方法,一种是使用类属性,还有一种就是通过对象直接添加对象属性。在Python中类的实例对象在创建后,是可以继续添加属性的。我们看看下边这个例子。我们使用空的大象类来创建两个对象,并为其中一个对象添加类中没有的属性。代码实现:class elephant:passdumbo=elephant()nangi=elephant()dumbo.weight=200kgprint(dumbo.weight)print(nangi.weight)可以看出,dumbo 和nangi 都是使用空的elephant类创建的对象。在创建后,我们使用赋值语句为dumbo对象添加了一个属性,而nangi 对象没有添加。最后输出对象的体重(weight)属性,可以看到dumbo对象正确的输出了体重(weight)属性的值“200kg”,在输出nangi对象体重(weight)属性时抛出了属性异常。从这个例子可以看出,对象在创建后可以继续添加原来没有的属性;添加的属性只对当前对象有效。如果我们通过对象来添加属性很可能出现,同一个类的不同对象之间有不同的属性。那么我们如何使用对象添加属性的同时,又保证所有同一个类的对象拥有相同的属性。解决这个问题,我们需要用到一个特殊的方法初始化方法(_init_),该方法在创建类实例对象的时候会自动调用一次,也被称为构造方法。在该方法中通过为self参数代表一个实例对象,来为当前类添加属性。我们通过初始化方法为大象添加三个属性。class elephant:def _init_(self,name,weight,length):self.weight=weight#体重 self.length=length#长度self.name=name#名称#大象类的移动方法def move(self):print(大象name正在移动.format(name=self.name)这里初始化方法(_init_)除了接收表示当前对象的self参数外,还声明了三个参数分别代表名称、体重、体长,并通过赋值的方式给self所代表的对象添加属性。前边说过初始化方法(_init_)会在对象创建时会自动调用一次。那么,我们定义_init_函数时声明的三个参数是该如何传递给初始化方法(_init_)。前边创建对象时,使用类名的方式和函数调用很相似,实际上在创建对象时确实也是在调用函数,确切的说是调用的方法初始化方法。在Python中在创建对象传递参数的方式如下:对象名=类名(参数列表)创建对象时,传递初始化参数。代码实现:dumbo=elephant(丹波,200kg,1m)dumbo.move()参数传递的过程可以参考下图:对象创建在定义好类以后,我们可以通过类名来创建类的实例,也就是对象。在Python中创建对象的方式如下:对象名 =类名(参数列表)对象名就是一个表示被创建类实例的标识符,可以简单的认为是变量名。我们可以通过对象名操作与之对应的对象实例。注意对象名不是对象本身,只是对象的代号,也被称为对象引用。我们使用前边定义的大象类来创建一个对象,并使用dumbo作为对象名。dumbo=elephant(丹波,200kg,1米)通过对象我们可以访问对象的属性,也可以调用对象的方法。在Python中使用对象来访属性的方式是通过点号(.)运算符来访实现的,点号运算符也称为成员访问运算符,具体如下:使用属性的方式:对象名.属性名为属性赋值:对象名.属性名=值我们在创建好对象后,可能需要修改一些对象中属性的值,也能需要访问对象的属性,比如我们可能想查看一下当前这只大象的名称是什么,或者修改一下它的体重。print(大象的名称是:,dumbo.name)dumbo.weight=300kgprint(dumbo.name+的体重现在是:,dumbo.weight)按照面向对象程序设计的一般原则,是不建议直接访问对象的属性的,而是通过类提供的方法来访问或修改对象的属性值。在Python中使用调用方法的方式和访问对象的属性是一样的,都是通过使用点号(.)来实现的,如下所示:对象名.方法名(参数列表)我们通过设置体重方法来修改对象实例的属性代码实现:print(大象的名称是:,dumbo.getName()dumbo.setWeight(400kg)print(dumbo.getName()+的体重现在是:,dumbo.getWeight()02面 向 对 象 特 性面向对象程序设计中非常重要的三个特性。面向对象程序设计中非常重要的三个特性。封装封装 继承继承 多态多态封装封装(encapsulation)是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用,从而确保了安全。数据封装引申出了另一个重要的面向对象程序设计概念,即数据隐藏。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。类的使用在不用了解类的实现细节,只需要知道类提供的方法有哪些即可,这样带来的好处是,不同程序模块不需要相互知道对方的代码细节,只通过一些共用的方法来调用,降低了程序内部不同模块之间的耦合性,这在分析、设计、实现过程中都简化了问题的复杂度,为大型软件项目提供了方法上的支持。封装根据具体的需要,设置使用者的访问权限,访问权限一般分为:公共访问权限、私有访问权限。访问权限定义了一个类成员的范围和可见性。公共访问权限:类的外部代码可以任意访问的类属性和方法。私有访问权限:只能在类的内部,由类自身代码访问的属性和方法。Python使用如下的语法来设置属性的访问控制:self._属性名=初始化值注意属性名前的下划线(_)是两个,并且双下滑线也是属性名的一部分。属性可以为私有属性,方法也可以设置为私有方法。定义私有方法的方式和定义私有属性的方式是一样的,在方法名前边添加双下划线。注意,与属性名一样,双下划线也是方法名的一部分,使用时也需要带上双下划线。语法如下:class类名:def _方法名(self,参数列表):方法代码块使用私有属性隐藏数据,使用公有方法来访问数据,提供了数据封装功能。但是,这样的方式使用起来比较麻烦,每次需要访问属性时,都是一次方法调用,一般来说方法代表某种对象的行为,从语义上说和我们访问对象属性的目的相冲突,使代码的可阅读性降低。好在Python提供了访问器,使用访问器/设置器来访问对象属性,一来可以实现数据封装,二来语义上和我们的目的相一致。propertydef 访问器名称(self):其他功能语句return self.私有属性访问器名称.setterdef 设置器名称(self,value):其他功能语句self.私有属性=value访问器/设置器的使用的方式和对象的公用属性是一致的。取得属性值时:变量名=对象名.访问器名称设置属性值时:对象名.设置器名称=新值继承继承(inheriting)是面向对象技术中的另外一个重要特点。继承,顾名思义,是后者延续前者的某些方面的特点,而在面向对象技术则是指新类从已有类那里得到已有的特性。这个类的派生过程中,原有的类称为基类(base class)或父类(parent class),产生的新类称为派生类(derived class)或子类(subclass)。子类继承基类后,可以创建子类对象来调用基类方法、访问基类的属性等。如果面向对象程序设计语言不支持继承,类就仅仅是带有相关行为的数据结构。在现实世界中,对象一般是有层次关系的,比如一个具体的学生A,首先他是属于大学生这个群体的,他的行为应该符合大学生群体的一般行为;其次,他是属于学生这个群体的,他的行为应该符合学生的行为;此外,他是人类的一员,那么他的行为也应该符合人类的行为。面向对象程序设计中,把这种现实世界的层次关系抽象出来就形成了类的继承。学生A是大学生类的实例、大学生类继承自学生类、学生类继承自人类,类在这个继承体系中层次越高越抽象。我们可以用下边的图来理解继承关系。继承可以看作“是一个”(is-a)的关系,我们把这个套入上边那个例子,学生A“是一个”大学生、大学生“是一个”学生、学生“是一个”人。下图展示的就是这样一个关系,这个关系中,最左边的“学生A”是一个大学生类的对象,它有自己的属性值,它的行为是由大学生类定义的;大学生类中定义了作为大学生特有的行为,大学生作为一个学生的行为是从学生类继承而来;同样的,学生类中定义了作为学生的特定行为,而作为人的行为是从人这个类继承来的。Python中支持类的继承,其用法也非常简单,在定义类时指定类的父类即可,如下:class 子类(基类1,基类2,基类3,.):成员列表从这里可以看出,Python是支持多重集成的。我们运用一下面向对象的方式来分析一下这个问题。大象、马、鳄鱼都是一种动物,动物都有移动、进食、睡觉这些动作;此外,动物都有名称、体重、长度等属性。我们定义一个动物类表示所有动物,然后再定义不同的具体种类的动物类,在这些具体的动物类中定义他们特殊的行为和属性。那些所有都具有的属性和行为都从动物类中继承下来。有没有一种访问权限控制能让派生类使用,但是限制类外的代码使用类中的属性和方法。在很多语言中都有这样的访问权限控制,这被称为受保护访问(protected)。受保护访问允许子类访问父类的“保护成员”。在python中也提供这个功能,只是这个功能并不严格,更像一种编码约定。class 类名:_属性名=初始值或者:class 类名:def _init_(self,参数列表):self._属性名=初始值这里需要注意的是“_属性名”前边包含一个下划线(_),并且下划线是属性名的一部分。一般来说,当一个类继承其他类后,在使用类创建对象时,会首先调它父类的构造方法。这过程会递归进行,如果它的父类也是继承自其他类,那么也会先调用其父类的构造方法。super()函数是用于调用父类的一个方法。通过这个函数不仅仅可以调用初始化方法,还可以调用父类的其他方法,这在我们重写了父类的某个方法时非常有用,该函数可以在类的方法中和方法外使用,用法如下:class 子类名(父类):def 方法名(self,参数列表):super(子类名,self).方法名(参数列表)#或者简写为:super().方法名(参数列表)多态多态多态(Polymorphism)是面向对象的重要特性,简单点说就是“一个接口,多种实现”;指一个基类中派生出了不同的子类,且每个子类在继承了同样的方法名的同时又对父类的方法做了不同的实现,这就是同一种事物表现出的多种形态。我们继续以上一节的动物类及其子类来说明多态这一特性。动物都会移动,但是不同的动物移动的方式却不一样,比如:大象移动缓慢,马可以奔跑,鳄鱼可以在水中游动。对应到程序设计中,我们往往希望对不同对象的同一个方法调用有不同行为。如:文件、网络、数据库等对象,都有打开操作,但是具体到每个对象,其打开操作的行为却不同,比如文件对象的打开是打开一个具体的文件进行读写,网络对象的打开是链接一个远端的主机进行通信,数据库的打开是连接数据库进行数据的查询和修改等。03接口面向对象程序设计中,实现的基本单元是类(class),一个完整的类包括数据、方法声明、以及实现,但是并不是所有情况下都需要这样一个“完整”的类。如为软件系统设计日志模块,我们需要记录软件在运行过程中发生一些事件,诸如用户登录、查询等;这些事件会由日志模块记录并保存,以供日后系统维护、数据分析等需要时使用;其中日志保存的位置会根据需要进行调整,可能是在本地文件系统中、远端的日志服务器中、或者数据库中。在大多面向对象的编程语言中都在语言层面提供了对接口的支持,如Java、C#中的interface。但是,Python语言本身并不提供接口的支持,不过我们可通过Python提供的abc模块(抽象基类Abstract Base Classes)来实现接口。该模块提供了在Python中定义抽象基类(ABC)的组件。该模块提供了一个元类ABCMeta,可以用来定义抽象类。使用该元类以创建抽象基类。抽象基类可以直接被子类继承。抽象基类中实现的方法也不可调用(即使通过 super()调用也不行)。import abcclass 接口名(metaclass=abc.ABCMeta):接口方法定义或在使用ABC类作为基类来派生接口,ABC是一个工具类,它是用ABCMeta作为自身的元类:import abcclass 接口名(abc.ABC):接口方法定义我们动物类,修改为动物接口。代码实现:import abc#动物接口class animalIn(metaclass=abc.ABCMeta):abc.abstractmethod#动物接口的移动方法def move(self):passaniamObj=animalIn()运行结果:TypeError:Cant instantiate abstract class animalIn with abstract methods eat,move,run,sleep了解面向对象编程的概念理解封装、继承、多态的概念掌握python中类的使用能够分析问题并设计相应的类能灵活使用系统以及第三方提供的类库

    注意事项

    本文(Python程序设计案例教程第8章 Python面向对象教学课件.pptx)为本站会员(春哥&#****71;)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开