Python-第八章面向对象编程ppt课件.ppt

上传人:飞****2 文档编号:69262797 上传时间:2023-01-01 格式:PPT 页数:114 大小:1.09MB
返回 下载 相关 举报
Python-第八章面向对象编程ppt课件.ppt_第1页
第1页 / 共114页
Python-第八章面向对象编程ppt课件.ppt_第2页
第2页 / 共114页
点击查看更多>>
资源描述

《Python-第八章面向对象编程ppt课件.ppt》由会员分享,可在线阅读,更多相关《Python-第八章面向对象编程ppt课件.ppt(114页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去Python语言编程导论语言编程导论第八章第八章 面向对象编程面向对象编程2022/12/311火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去内容提要内容提要面向对象程序设计方法的由来面向对象程序设计方法的由来类和对象类和对象属性和方法属性和方法继承继承2022/12/312火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去一、面向对象程序设计方法的由来一、面向对象程序

2、设计方法的由来1、面向过程的程序设计方法最早的程序:最早的程序:目的:用于数学计算目的:用于数学计算主要工作:设计求解问题的过程主要工作:设计求解问题的过程缺点:对于庞大、复杂的程序难以开发和维护缺点:对于庞大、复杂的程序难以开发和维护2022/12/313火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去面向过程程序设计基本步骤:面向过程程序设计基本步骤:分析程序从输入到输出的各步骤分析程序从输入到输出的各步骤 按照执行过程从前到后编写程序按照执行过程从前到后编写程序 将高耦合部分封装成模块或函数将高耦合部分封装成模块或函数 输入参数

3、,按照程序执行过程调试输入参数,按照程序执行过程调试 2022/12/314火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去面向过程的程序设计特点:面向过程的程序设计特点:过程化程序设计的典型方法是过程化程序设计的典型方法是“结构化程序设计结构化程序设计”方法方法,是由荷兰学者是由荷兰学者Dijkstra在在70年代提出年代提出的的。程序设计原则:程序设计原则:自上而下、逐步求精、模自上而下、逐步求精、模块块化编化编程等。程等。程序结构:程序结构:按功能划分为若干个基本模块。按功能划分为若干个基本模块。各模块间的关系尽可能简单,功能上

4、相对独立;每一各模块间的关系尽可能简单,功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成。模块内部均是由顺序、选择和循环三种基本结构组成。其模块化实现的具体方法是使用子程序(过程其模块化实现的具体方法是使用子程序(过程/函数)。函数)。2022/12/315火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去面向过程的程序设计特点(续):面向过程的程序设计特点(续):程序组成:程序组成:由传递参数的函数集合组成,每个函由传递参数的函数集合组成,每个函数处理它的参数,并可能返回某个值数处理它的参数,并可能返回某个值。即:主

5、模。即:主模块块+子模块,它们之间以数据作为连接(程序子模块,它们之间以数据作为连接(程序=算法算法+数据结构)。数据结构)。程序特点:程序特点:程序是以过程为中心的。程序员必须程序是以过程为中心的。程序员必须基于过程来组织模块。基于过程来组织模块。数据处于次要的地位,而数据处于次要的地位,而过程是关心的重点。过程是关心的重点。优点:有效地将一个较复杂的程序系统设计任务优点:有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发分解成许多易于控制和处理的子任务,便于开发和维护。和维护。2022/12/316火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披

6、上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去三种程序基本结构三种程序基本结构顺序顺序循环循环选择选择2022/12/317火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去面向过程的程序设计缺点:面向过程的程序设计缺点:数据与处理数据的方法(函数)相分离。数据与处理数据的方法(函数)相分离。一旦问题(数据)改变,程序一旦问题(数据)改变,程序员则需要改写或重新编写新的解决方法(功能函数),员则需要改写或重新编写新的解决方法(功能函数),有时几个关键的数据有时几个关键的数据结构发生变化,将导致整个软件系统的结构崩溃。随着软件规模和复杂性的

7、结构发生变化,将导致整个软件系统的结构崩溃。随着软件规模和复杂性的增长,这种缺陷日益明显。当程序达到一定规模后,为了修改一个小的错误,增长,这种缺陷日益明显。当程序达到一定规模后,为了修改一个小的错误,常可能引出多个大的错误,究其原因,问题就出在传统的程序设计方式上。常可能引出多个大的错误,究其原因,问题就出在传统的程序设计方式上。一般适用于中小型的程序设计及编程应用。一般适用于中小型的程序设计及编程应用。管理的数据类型无法满足需要。管理的数据类型无法满足需要。当前的软件应用领域已从传统的科学计算当前的软件应用领域已从传统的科学计算和事务处理扩展到了其它的很多方面,如人工智能、计算机辅助设计和

8、辅助和事务处理扩展到了其它的很多方面,如人工智能、计算机辅助设计和辅助制造等,所需处理的数据也已从简单的数字和字符串发展为记录在各种介质制造等,所需处理的数据也已从简单的数字和字符串发展为记录在各种介质上并且有多种格式的多媒体数据,如数字、正文、图形、声音和影像等。数上并且有多种格式的多媒体数据,如数字、正文、图形、声音和影像等。数据量和数据类型的空前激增导致了许多程序的规模和复杂性均接近或达到了据量和数据类型的空前激增导致了许多程序的规模和复杂性均接近或达到了用结构化程序设计方法无法管理的程度。用结构化程序设计方法无法管理的程度。可重用性差。可重用性差。只能以函数的方式实现代码重用,效率低,

9、是手工作坊式的编只能以函数的方式实现代码重用,效率低,是手工作坊式的编程模式。程模式。作为软件公司,都希望设计的程序具有可重用性,即能否建立一些作为软件公司,都希望设计的程序具有可重用性,即能否建立一些具有已知特性的部件,应用程序通过部件组装即可得到一个新的系统具有已知特性的部件,应用程序通过部件组装即可得到一个新的系统。2022/12/318火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去例例8-1:铅球飞行计算问题:铅球飞行计算问题(使用面向过程(使用面向过程方法)方法)功能要求:在给定不同的投掷角度和初始功能要求:在给定不同的投

10、掷角度和初始速度下,求解计算铅球的飞行距离。速度下,求解计算铅球的飞行距离。设计流程(功能分解、逐步求精):设计流程(功能分解、逐步求精):输入:铅球发射角度、初始速度输入:铅球发射角度、初始速度(m/s)、初始、初始高度高度(m)处理:模拟铅球飞行,时刻更新铅球在飞行中处理:模拟铅球飞行,时刻更新铅球在飞行中的位置的位置 输出:铅球飞行距离输出:铅球飞行距离(m)2022/12/319火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去简化问题:简化问题:忽略空气阻力忽略空气阻力 重力加速度重力加速度9.8 m/s2 铅球飞行过程铅球飞

11、行过程 铅球高度铅球高度 飞行距离飞行距离 时刻更新铅球在飞行中的位置。时刻更新铅球在飞行中的位置。假设起始位置是点(假设起始位置是点(0,0)垂直方向上运动距离(垂直方向上运动距离(y轴)轴)水平方向上移动距离(水平方向上移动距离(x轴)轴)2022/12/3110火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去设计参数:设计参数:仿真参数:投掷角度仿真参数:投掷角度angle、初始速度、初始速度velocity、初始高度、初始高度height、飞行距离、飞行距离interval 位置参数:位置参数:x轴坐标轴坐标xpos,y轴坐标

12、轴坐标ypos 速度分量:速度分量:x轴方向上速度轴方向上速度xvel,y轴方向轴方向上速度上速度yvel 2022/12/3111火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去根据提示输入仿真参数:根据提示输入仿真参数:2022/12/3112火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去计算初始速度:计算初始速度:x轴的速度轴的速度 xvel=velocity*cos(theta)y轴的速度轴的速度 yvel=velocity*sin(theta)2022/12/31

13、13火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去完整程序:完整程序:2022/12/3114火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去程序模块化:程序模块化:2022/12/3115火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去2、面向对象程序设计方法、面向对象程序设计方法面向对象编程是一种组织程序的新型思维方面向对象编程是一种组织程序的新型思维方式,软件设计的焦点不再是程序的逻辑流程,式,软件设计的焦点

14、不再是程序的逻辑流程,而是软件或程序中的对象以及对象之间的关而是软件或程序中的对象以及对象之间的关系。系。将数据及对数据的操作方法封装在一起,作为一将数据及对数据的操作方法封装在一起,作为一个相互依存、不可分离的整体个相互依存、不可分离的整体对象。对象。对同类型对象抽象出其共性,形成类。对同类型对象抽象出其共性,形成类。类通过一个简单的外部接口,与外界发生关系。类通过一个简单的外部接口,与外界发生关系。对象与对象之间通过消息进行通信。对象与对象之间通过消息进行通信。2022/12/3116火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出

15、去面向对象程序设计方法优点:面向对象程序设计方法优点:程序模块间的关系更为简单,程序模块的程序模块间的关系更为简单,程序模块的独立性、数据的安全性就有了良好的保障。独立性、数据的安全性就有了良好的保障。通过继承与多态性,可以大大提高程序的通过继承与多态性,可以大大提高程序的可重用性,使得软件的开发和维护都更为可重用性,使得软件的开发和维护都更为方便。方便。2022/12/3117火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去3、Python支持的编程方式支持的编程方式Python支持面向过程、面向对象、函数式支持面向过程、面向对象、

16、函数式编程等多种编程方式。编程等多种编程方式。Python不强制使用任何一种编程方式,可不强制使用任何一种编程方式,可以使用面向过程方式编写任何程序,在编以使用面向过程方式编写任何程序,在编写小程序(少于写小程序(少于500行代码)时,不会有行代码)时,不会有问题。但对于中等和大型项目来说,面向问题。但对于中等和大型项目来说,面向对象会带来很多优势。对象会带来很多优势。2022/12/3118火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去Python对面向对象的语法进行了简化,去对面向对象的语法进行了简化,去掉了面向对象中许多复杂的

17、特性。例如,掉了面向对象中许多复杂的特性。例如,类的属性和方法的限制符类的属性和方法的限制符public、private、protected。Python提倡语提倡语法的简单、易用性,这些访问权限靠程序法的简单、易用性,这些访问权限靠程序员自觉遵守,而不强制使用。员自觉遵守,而不强制使用。2022/12/3119火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去例例8-2:铅球飞行计算问题:铅球飞行计算问题(使用面向对象(使用面向对象方法)方法)设计流程:设计流程:定义出一个定义出一个“投射体投射体”类类描述投射体类的属描述投射体类的属

18、性(铅球对象属性:性(铅球对象属性:xpos、ypos、xvel、yvel,铅球对象操作:更新投射体状态、返回投,铅球对象操作:更新投射体状态、返回投射体高度、返回投射体距离);射体高度、返回投射体距离);将此类(实例化)具体化以定义出一个对象(代将此类(实例化)具体化以定义出一个对象(代表本次计算的问题);表本次计算的问题);向此对象发送一条消息向此对象发送一条消息获取投射体的高度。获取投射体的高度。反复进行此步骤,直到投射体高度为零(即已落反复进行此步骤,直到投射体高度为零(即已落地)地);再向此对象发送一条消息再向此对象发送一条消息显示出投射距离。显示出投射距离。2022/12/3120

19、火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去投射体类定义:投射体类定义:2022/12/3121火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去引入对象,程序模块化:引入对象,程序模块化:2022/12/3122火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去程序执行:程序执行:选手选手1技术强技术强 铅球的出手角度铅球的出手角度41度度 出手速度出手速度14米米/秒秒 初始高度初始高度1.8米米 仿真间隔仿真间

20、隔0.3秒秒 铅球最远飞行距离铅球最远飞行距离22.2.米米 选手选手2力量大力量大 铅球的出手角度铅球的出手角度30度度 出手速度出手速度15米米/秒秒 始高度始高度2米米 仿真间隔仿真间隔0.3秒秒 铅球最远飞行距离铅球最远飞行距离23.4米米 2022/12/3123火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去二、类和对象二、类和对象在面向对象程序设计中,程序员可以创建在面向对象程序设计中,程序员可以创建任何新的类型,这些类型可以描述每个对任何新的类型,这些类型可以描述每个对象包含的数据和特征,这种类型称为类。象包含的数据和

21、特征,这种类型称为类。类是一些对象的抽象,隐藏了对象内部复类是一些对象的抽象,隐藏了对象内部复杂的结构和实现。杂的结构和实现。类由变量和函数两部分构成,类中的变量类由变量和函数两部分构成,类中的变量称为成员变量,类中的函数称为成员函数。称为成员变量,类中的函数称为成员函数。2022/12/3124火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去1、对象的概念、对象的概念Python支持许多不同类型的数据。例如:支持许多不同类型的数据。例如:1234int;3.14159float;”Hello”str1,2,3,5,7,11,13li

22、st”CA”:”California”,”MA”:”Massachusetts”dict以上每种类型都是对象。以上每种类型都是对象。2022/12/3125火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去对象具有的特点:对象具有的特点:类型(一个特定的对象被认为是类型的实类型(一个特定的对象被认为是类型的实例)例)内部数据表示(简单或复合)内部数据表示(简单或复合)一组与对象交互的方法(函数)一组与对象交互的方法(函数)说明:对象的内部表示是私有的,用户不应说明:对象的内部表示是私有的,用户不应当依赖其实现的特定细节。如果直接操作对当

23、依赖其实现的特定细节。如果直接操作对象的内部表示,可能会损害对象的正确行为。象的内部表示,可能会损害对象的正确行为。2022/12/3126火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去例如:例如:1,2,3,4Type:list内部数据表示内部数据表示:一个大小为一个大小为S(=L)的对象数组,或)的对象数组,或一组独立单元的链接表一组独立单元的链接表操作列表的方法操作列表的方法:li,li:j,li,j,k,+,*len(),min(),max(),del lil.append(),l.extend(),l.count(),l.

24、index(),l.insert(),l.pop(),l.remove(),l.reverse(),l.sort()2022/12/3127火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去2、类和对象的区别、类和对象的区别类和对象是类和对象是OOP中两个重要概念。类是对客观世中两个重要概念。类是对客观世界中事物的抽象,而对象是类实例化后的实体。界中事物的抽象,而对象是类实例化后的实体。类型和变量之间存在着一定的联系,类型是模板,类型和变量之间存在着一定的联系,类型是模板,而变量则是具有这种模板的一个实体。同样,有而变量则是具有这种模板

25、的一个实体。同样,有了了“类类”类型就有其对应的变量实体,这就是对类型就有其对应的变量实体,这就是对象。象。表面上看对象是某个表面上看对象是某个“类类”类型的变量,但对象类型的变量,但对象又不是普通的变量,又不是普通的变量,对象是一个数据和操作的封对象是一个数据和操作的封装体。装体。封装的目的就是阻止非法的访问,因此封装的目的就是阻止非法的访问,因此对对象实现了信息的隐藏象实现了信息的隐藏,外部只能通过操作接口访,外部只能通过操作接口访问对象数据。对象是属于某个已知的类的,因此问对象数据。对象是属于某个已知的类的,因此必须先定义类,然后才能定义对象。必须先定义类,然后才能定义对象。2022/1

26、2/3128火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去从本质上说,对象是一组数据以及操作这些数据从本质上说,对象是一组数据以及操作这些数据的函数。之前介绍的数字、字符串、列表、字典、的函数。之前介绍的数字、字符串、列表、字典、集合和函数都是集合和函数都是Python提供的内置对象。提供的内置对象。要创建新型对象,必须先创建类。类就类似于内要创建新型对象,必须先创建类。类就类似于内置数据类型,可用于创建特定类型的对象。置数据类型,可用于创建特定类型的对象。类指定了对象将包含哪些数据和函数,还指定了类指定了对象将包含哪些数据和函数,

27、还指定了对象与其他类的关系。对象封装了数据以及操作对象与其他类的关系。对象封装了数据以及操作这些数据的函数。这些数据的函数。一个重要的一个重要的OOP功能是继承:创建新类时,可让功能是继承:创建新类时,可让其继承父类的数据和函数。使用好继承可避免重其继承父类的数据和函数。使用好继承可避免重新编写代码,还可让程序更容易理解。新编写代码,还可让程序更容易理解。2022/12/3129火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去类与对象的关系类与对象的关系2022/12/3130火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立

28、断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去例如:自行车类例如:自行车类数据抽象数据抽象型号,品牌,换档数型号,品牌,换档数代码抽象代码抽象Break(),SpeedUp(),ChangShift(),Run(),Stop()2022/12/3131火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去例如:图形界面例如:图形界面相同点:相同点:有名字有名字有矩形框有矩形框鼠标点击时有效果鼠标点击时有效果不同点:不同点:功能不同功能不同2022/12/3132火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服

29、或裹上湿毛毯、湿被褥勇敢地冲出去3、类的定义、类的定义Python使用使用class关键字定义一个类,类关键字定义一个类,类名首字符一般要大写。名首字符一般要大写。当需要创建的类型不能用简单类型来表示当需要创建的类型不能用简单类型来表示时,则需要定义类,然后利用定义的类创时,则需要定义类,然后利用定义的类创建对象。建对象。格式:格式:class Class_name:2022/12/3133火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去例例8-3:创建一个:创建一个Person类类2022/12/3134火灾袭来时要迅速疏散逃生,不

30、可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去说明:说明:当定义一个类时,如果这个类没有任何父类,则将当定义一个类时,如果这个类没有任何父类,则将object设置为它的父类,用这种方式定义的类属于新式设置为它的父类,用这种方式定义的类属于新式类。如果定义的类没有设置任何父类,则这种方式定义的类。如果定义的类没有设置任何父类,则这种方式定义的类属于经典类。建议使用新式类,新式类将类与内建类型类属于经典类。建议使用新式类,新式类将类与内建类型进行了统一。新式类与经典类在多重继承问题中有一个重进行了统一。新式类与经典类在多重继承问题中有一个重要的区别:对于经典类,继

31、承顺序是采用深度优先的搜索要的区别:对于经典类,继承顺序是采用深度优先的搜索算法,对于新式类,继承顺序是采用广度优先的搜索算法。算法,对于新式类,继承顺序是采用广度优先的搜索算法。self是指向对象本身的变量,类似于是指向对象本身的变量,类似于C+的指针。的指针。Python要求,类内定义的每个方法的第一个参数是要求,类内定义的每个方法的第一个参数是self,通过实例调用时,该方法才会绑定到该实例上。,通过实例调用时,该方法才会绑定到该实例上。2022/12/3135火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去4、对象的创建、对象

32、的创建创建对象的过程称为实例化。当一个对象创建对象的过程称为实例化。当一个对象被创建之后,包含被创建之后,包含3方面的特性:对象的标方面的特性:对象的标识、属性和方法。识、属性和方法。对象的标识用于区分不同的对象,当对象对象的标识用于区分不同的对象,当对象被创建之后,该对象会获取一块存储空间,被创建之后,该对象会获取一块存储空间,存储空间的地址即为对象的标识。对象的存储空间的地址即为对象的标识。对象的属性和方法与类的成员变量和成员函数相属性和方法与类的成员变量和成员函数相对应。对应。2022/12/3136火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯

33、、湿被褥勇敢地冲出去例例8-4:对象的创建和应用:对象的创建和应用2022/12/3137火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去self示意图:示意图:Python自动给每个对象添加特殊变量自动给每个对象添加特殊变量self,该变量,该变量指向对象本身,让类中的函数能够明确地引用对象的指向对象本身,让类中的函数能够明确地引用对象的数据和函数。数据和函数。2022/12/3138火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去5、对象的显示、对象的显示在例在例8-4中

34、,定义了一个方法中,定义了一个方法display,用于显,用于显示对象的值。示对象的值。Python还提供了一些特殊方法,能够定制对象还提供了一些特殊方法,能够定制对象的打印。如:的打印。如:特殊方法特殊方法_str_,用于生成对象的字符串表示,用于生成对象的字符串表示(适合于人阅读的形式);(适合于人阅读的形式);特殊方法特殊方法_repr_,返回对象的,返回对象的“官方官方”表示表示(适合于解释器读取的形式);此外,可以通过(适合于解释器读取的形式);此外,可以通过eval()函数重新生成对象。函数重新生成对象。在大多数类中,方法在大多数类中,方法_repr_都与都与_str_相相同。同。

35、2022/12/3139火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去例如:例如:2022/12/3140火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去例例8-5:对象的显示:对象的显示执行结果:执行结果:2022/12/3141火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去课堂练习一:课堂练习一:课堂练习一课堂练习一2022/12/3142火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿

36、的衣服或裹上湿毛毯、湿被褥勇敢地冲出去三、属性和方法三、属性和方法类是由属性和方法组成。类的属性是对数据的封类是由属性和方法组成。类的属性是对数据的封装,而类的方法则表示对象具有的行为。装,而类的方法则表示对象具有的行为。类通常由函数(实例方法)和变量(类变量)组类通常由函数(实例方法)和变量(类变量)组成。成。Python的构造函数、析构函数、私有属性或方的构造函数、析构函数、私有属性或方法都是通过名称约定区分的。法都是通过名称约定区分的。此外,此外,Python还提供了一些有用的内置方法,还提供了一些有用的内置方法,简化了类的实现。简化了类的实现。2022/12/3143火灾袭来时要迅速疏

37、散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去例如:按钮(例如:按钮(button)2022/12/3144火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去1、类的属性、类的属性Python的类的属性一般分为私有属性和公有属性,像的类的属性一般分为私有属性和公有属性,像C+有定义属性的关键字(有定义属性的关键字(public、private、protect),而),而Python没有这类关键字,默认情况下所没有这类关键字,默认情况下所有的属性都是有的属性都是“公有的公有的”,对公有属性的访问

38、没有任何限,对公有属性的访问没有任何限制,且都会被子类继承,也能从子类中进行访问。制,且都会被子类继承,也能从子类中进行访问。若不希望类中的属性在类外被直接访问,就要定义为私有若不希望类中的属性在类外被直接访问,就要定义为私有属性。属性。Python使用约定属性名称来划分属性类型。使用约定属性名称来划分属性类型。若属若属性的名字以两个下划线开始,表示私有属性;反之,没有性的名字以两个下划线开始,表示私有属性;反之,没有使用双下划线开始的表示公有属性。类的方法也同样使用使用双下划线开始的表示公有属性。类的方法也同样使用这样的约定。这样的约定。另外,另外,Python没有保护类型的修饰符。没有保护

39、类型的修饰符。2022/12/3145火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去Python的实例属性和静态属性:的实例属性和静态属性:实例属性是以实例属性是以self为前缀的属性,没有该前缀的为前缀的属性,没有该前缀的属性是普通的局部变量。属性是普通的局部变量。C+中有一类特殊的属性称为静态变量。静态变中有一类特殊的属性称为静态变量。静态变量可以被类直接调用,而不被实例化对象调用。量可以被类直接调用,而不被实例化对象调用。当创建新的实例化对象后,静态变量并不会获取当创建新的实例化对象后,静态变量并不会获取新的内存空间,而是使用

40、类创建的内存空间。因新的内存空间,而是使用类创建的内存空间。因此,静态变量能够被多个实例化对象共享。此,静态变量能够被多个实例化对象共享。在在Python中静态变量称为类变量,类变量可以中静态变量称为类变量,类变量可以在该类的所有实例中被共享。在该类的所有实例中被共享。2022/12/3146火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去例例8-6:实例变量和类变量:实例变量和类变量执行结果:执行结果:2022/12/3147火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去

41、关于关于Python私有属性的访问:私有属性的访问:类的外部不能直接访问私有属性。类的外部不能直接访问私有属性。Python提供了直接访问私有属性的方式,可用于程提供了直接访问私有属性的方式,可用于程序的测试和调试。序的测试和调试。私有属性访问的格式:私有属性访问的格式:instance._classname_attribute说明:说明:instance表示实例化对象;表示实例化对象;classname表示类名;表示类名;attibute表示私有属性表示私有属性注意:注意:classname之前是单下划线,之前是单下划线,attribute之之前是双下划线前是双下划线2022/12/3148

42、火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去例例8-7:访问私有属性:访问私有属性执行结果:执行结果:2022/12/3149火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去注意:注意:Python对类的属性和方法的定义次序并没对类的属性和方法的定义次序并没有要求。合理的方式是将类属性定义在类有要求。合理的方式是将类属性定义在类中最前面,然后再定义私有方法,最后定中最前面,然后再定义私有方法,最后定义公有方法。义公有方法。Python的类还提供了一些内置属性,用于的类还提

43、供了一些内置属性,用于管理类的内部关系。例如:管理类的内部关系。例如:_dict_,_bases_,_doc_等。等。2022/12/3150火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去例例8-8:常见的类内置属性用法:常见的类内置属性用法2022/12/3151火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去2、类的方法、类的方法类的方法也分为公有方法和私有方法。私有类的方法也分为公有方法和私有方法。私有方法不能被模块外的类或方法调用,私有方方法不能被模块外的类或方法调

44、用,私有方法也不能被外部的类或函数调用。法也不能被外部的类或函数调用。C+中的静态方法使用关键字中的静态方法使用关键字static声明,声明,而而Python使用函数使用函数staticmethod()或或staticmethod修饰器将普通的函数转换修饰器将普通的函数转换为静态方法。为静态方法。Python的静态方法并没有和的静态方法并没有和类的实例进行名称绑定,要调用除了使用通类的实例进行名称绑定,要调用除了使用通常的方法,使用类名作为其前缀亦可。常的方法,使用类名作为其前缀亦可。2022/12/3152火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛

45、毯、湿被褥勇敢地冲出去例例8-9:类的方法及静态方法的使用:类的方法及静态方法的使用执行结果:执行结果:2022/12/3153火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去3、_init_方法方法构造函数用于初始化类的内部状态,为类的属构造函数用于初始化类的内部状态,为类的属性设置默认值。性设置默认值。C+的构造函数是与类同名的方法,而的构造函数是与类同名的方法,而Python的构造函数名为的构造函数名为_init_。_init_方法除了用于定义实例变量外,还方法除了用于定义实例变量外,还用于程序的初始化。用于程序的初始化。_in

46、it_方法是可选的,若不提供方法是可选的,若不提供_init_方法,方法,Python将会给出将会给出1个默认个默认的的_init_方法。方法。2022/12/3154火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去初始化过程:初始化过程:当类被调用后,当类被调用后,Python将创建实例对象将创建实例对象 创建完对象之后,创建完对象之后,Python自动调用的第一自动调用的第一个方法为个方法为_init_()实例对象作为方法的第一个参数(实例对象作为方法的第一个参数(self)被传递进去,调用类创建实例对象时的参被传递进去,调用类创

47、建实例对象时的参数都传给数都传给_init_()2022/12/3155火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去例例8-10:构造函数应用一:构造函数应用一执行结果:执行结果:2022/12/3156火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去例例8-11:构造函数应用二:构造函数应用二上例中,若给出的值不合理也无法限制。通常的做法是在上例中,若给出的值不合理也无法限制。通常的做法是在类中定义设置函数和获取函数。类中定义设置函数和获取函数。2022/12/3157

48、火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去4、_del_方法方法析构函数用于释放对象占用的资源。析构函数用于释放对象占用的资源。Python提供了析构函数提供了析构函数_del_()。析构函数也是可选。析构函数也是可选的。若程序中不提供析构函数,的。若程序中不提供析构函数,Python会提供默认的析构会提供默认的析构函数。函数。当对象不再被使用时,当对象不再被使用时,_del_方法运行,但是很难保证方法运行,但是很难保证这个方法究竟什么时候运行,若想指明它的运行,就要显式这个方法究竟什么时候运行,若想指明它的运行,就要显式地调用

49、析构函数:地调用析构函数:del 对象名对象名由于由于Python中定义了中定义了_del_()的实例将无法被的实例将无法被Python的循环垃圾收集器(的循环垃圾收集器(gc)收集,所以建议只有需要)收集,所以建议只有需要时才定义时才定义_del_。事实上,使用事实上,使用Python编写程序可以不考虑后台的内存管理,编写程序可以不考虑后台的内存管理,直接面对程序的逻辑。直接面对程序的逻辑。2022/12/3158火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去例例8-12:析构函数应用:析构函数应用2022/12/3159火灾袭来

50、时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去5、垃圾回收机制、垃圾回收机制Python使用垃圾回收机制来清理不再使用使用垃圾回收机制来清理不再使用的对象。的对象。Python提供提供gc模块释放不再使模块释放不再使用的对象,用的对象,Python采用采用“引用计数引用计数”的算的算法来处理回收,即:当某个对象在其作用法来处理回收,即:当某个对象在其作用域内不再被其他对象引用时,域内不再被其他对象引用时,Python就自就自动清除该对象。动清除该对象。Python的函数的函数collect()可以一次性收集可以一次性收集所有待处理的对象(所

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

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

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