第7章类与面向对象_0708.pptx

上传人:知****量 文档编号:18238660 上传时间:2022-05-30 格式:PPTX 页数:69 大小:1.88MB
返回 下载 相关 举报
第7章类与面向对象_0708.pptx_第1页
第1页 / 共69页
第7章类与面向对象_0708.pptx_第2页
第2页 / 共69页
点击查看更多>>
资源描述

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

1、 第7章 类与面向对象 面向对象 类与对象 构造方法与析构方法 类方法和静态方法 继承 多态 掌握了解掌握熟悉 学习目标掌握 面向对象,类的定义与使用12掌握 构造方法,类的继承,方法的重写熟悉 创建对象,访问对象成员,多态34了解 类方法,静态方法,析构方法 目录页01 面向对象02 类与对象03 构造方法与析构方法04 类方法和静态方法05 实例1:银行管理系统06 继承 目录页07 实例2:井字棋08 多态 过渡页01 面向对象02 类与对象03 构造方法与析构方法04 类方法和静态方法05 实例1:银行管理系统06 继承 面向对象概述面向对象是程序开发领域中的重要思想,这种思想模拟了人

2、类认识客观世界的逻辑,是当前计算机软件工程学的主流方法。类是面向对象的实现类是面向对象的实现手手段段。 面向对象概述面向过程编程的基本思想是:分析解决问题的步骤,使用函数实现步骤相应的功能,按照步骤的先后顺序依次调用函数。面向过程只考虑如何解决当前问题,它着眼于问题本身。 ! 面向对象概述面向对象编程的基本思想是:首先会从问题之中提炼出问题涉及的角色,将不同角色各自的特征和关系进行封装,以角色为主体,通过描述角色的行为去描述解决问题的过程。面向对象编程的着眼之处在于角色以及角色之间的联系。 ! 面向对象概述以五子棋为例说明面向过程和面向对象编程的区别。面向过程游戏开始后黑子一方先落棋,棋子落在

3、棋盘后棋盘产生变化,棋盘更新并判断输赢:若本轮落棋的一方胜利则输出结果并结束游戏,否则白子一方落棋、棋盘更新、判断输赢,如此往复,直至分出胜负。面向对象五子棋游戏中的角色分为两个:玩家和棋盘。不同的角色负责不同的功能,例如:(1)玩家角色负责控制棋子落下的位置;(2)棋盘角色负责保存棋盘状况、绘制画面、判断输赢。 面向对象概述角色之间互相独立,但相互协作,游戏的流程不再由单一的功能函数实现,而是通过调用与角色相关的方法来完成。结 论 面向对象概述面向对象保证了功能的统一性,基于面向对象实现的代码更容易维护,比如,现在要加入悔棋的功能。面向过程改动会涉及到游戏的整个流程,输入、判断、显示这一系列

4、步骤都需要修改。面向对象由于棋盘状况由棋盘角色保存,只需要为棋盘角色添加回溯功能即可。 面向对象的基本概念对象是现实世界中可描述的事物,它可以是有形的也可以是无形的,从一本书到一家图书馆,从单个整数到繁杂的序列等都可以称为对象。对象(object) 面向对象的基本概念对象是构成世界的一个独立单位,它由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一个独立整体。对象(object)数据对象操作 面向对象的基本概念从具体的事物中把共同的特征抽取出来,形成一般的概念称为“归类”,忽略事物的非本质特牲,关注与目标有关的本质特征,找出事物间的共性,抽象出一个概念模型,就是定义一个类。类(

5、class)动物类动物类 面向对象的基本概念在面向对象的方法中,类是具有相同属性和行为的一组对象的集合,它提供一个抽象的描述,其内部包括属性和方法两个主要部分,它就像一个模具,可以用它铸造一个个具体的铸件。类(class) 面向对象的基本概念抽象是抽取特定实例的共同特征,形成概念的过程。抽象(abstract)例例如如苹果、香蕉、梨、葡萄等,抽取出它们共同特性就得出“水果”这一类,那么得出水果概念的过程,就是一个抽象的过程。 面向对象的基本概念封装(encapsulation)封装是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外界知道具体实现细节,这就是封装思想。 面向对象的基本概

6、念继承(inheritance)继承描述的是类与类之间的关系,通过继承,新生类可以在无需赘写原有类的情况下,对原有类的功能进行扩展。汽车类普通特性与功能轿车类普通特性与功能其它特性与功能继承继承 面向对象的基本概念多态( polymorphism)多态指同一个属性或行为在父类及其各派生类中具有不同的语义。 面向对象的基本概念封装、继承、多态是面向对象程序设计的三大特征,它们的简单关系如下图所示。 过渡页01 面向对象02 类与对象03 构造方法与析构方法04 类方法和静态方法05 实例1:银行管理系统06 继承 类和对象的关系面向对象的思想中提出了两个概念:类和对象。类类是对多个对象共同特征的

7、抽象描述,它是对象的模板。对象对象用于描述现实中的个体,它是类的实例。 类和对象的关系厂商在生产汽车之前会先分析用户需求,设计汽车模型,制作设计图样,设计图通过之后工厂再依照图纸批量生产汽车。 类的定义类中可以定义数据成员和成员函数,数据成员用于描述对象特征,成员函数用于描述对象行为,其中数据成员也被称为属性,成员函数也被称为方法。class 类名: 属性名 = 属性值 def 方法名(self): 方法体 对象的创建与使用类定义完成后不能直接使用,这就好比画好了一张房屋设计图纸,此图纸只能帮助人们了解房屋的结构,但不能提供居住场所。为满足居住需求,需要根据房屋设计图纸搭建实际的房屋。同理,程

8、序中的类需要实例化为对象才能实现其意义。 对象的创建与使用对象的创建创建对象的格式如下:对象名 = 类名() 对象的创建与使用访问对象成员若想在程序中真正地使用对象,需掌握访问对象成员的方式。对象成员分为属性和方法,它们的访问格式分别如下:对象名.属性对象名.方法() 访问限制类中定义的属性和方法默认为公有属性和方法,该类的对象可以任意访问类的公有成员。为了契合封装原则,保证类中的代码不被外部代码轻易访问。 Python支持将类中的成员设置为私有成员,在一定程度上限制对象对类成员的访问。 访问限制定义私有成员Python通过在类成员名之前添加双下划线(_)来限制成员的访问权限,语法格式如下:_

9、属性名_方法名 访问限制定义私有成员例如,定义一个包含私有属性_weight和私有方法_info()的类PersonInfo。class PersonInfo: _weight = 55 # 私有属性 def _info(self): # 私有方法 print(f我的体重是:_weight) 访问限制私有成员的访问创建PersonInfo类的对象person,通过该对象访问类的属性:person = PersonInfo()person._weightAttributeError: PersonInfo object has no attribute _weight 访问限制私有成员的访问注释

10、访问私有属性的代码,在程序中添加如下的访问类中私有方法的代码:person = PersonInfo()# person._weightperson._info()AttributeError: PersonInfo object has no attribute _info 访问限制由以上展示的错误信息可以判断,对象无法直接访问类的私有成员。结 论 访问限制class PersonInfo: _weight = 55 # 私有属性 def get_weight(self): print(f体重:self._weightkg)person = PersonInfo()person.get_we

11、ight()私有属性可在公有方法中通过指代对象本身的默认参数“self”访问,类外部可通过公有方法间接获取类的私有属性。 访问限制class PersonInfo: _weight = 55 # 私有属性 def _info(self): # 私有方法 print(f我的体重是:self._weight) def get_weight(self): print(f体重:self._weightkg) self._info()person = PersonInfo()person.get_weight()私有方法同样在公有方法中通过参数“self”访问。 过渡页01 面向对象02 类与对象03

12、构造方法与析构方法04 类方法和静态方法05 实例1:银行管理系统06 继承 构造方法每个类都有一个默认的_init_()方法。 如果定义类时显式地定义_init_()方法,那么创建对象时Python解释器会调用显式定义的_init_()方法; 如果定义类时没有显式定义_init_()方法,那么Python解释器会调用默认的_init_()方法。 构造方法_init_()方法按照参数的有无(self除外)可分为有参构造方法和无参构造方法。无参构造方法无参构造方法中可以为属性设置初始值,此时使用该方法创建的所有对象都具有相同的初始值。有参构造方法有参构造方法中可以使用参数为属性设置初始值,此时使

13、用该方法创建的所有对象都具有不同的初始值。 构造方法定义一个类Information,在该类中显式地定义一个带有3个参数的_init_()方法。class Inforamtion(object): def _init_(self, name, sex): self.name = name self.sex = sexinfomation = Inforamtion(李婉, 女) 构造方法前面在类中定义的属性是类属性,可以通过对象或类进行访问;在构造方法中定义的属性是实例属性,只能通过对象进行访问。 析构方法在介绍析构方法之前,先来了解Python的垃圾回收机制。Python中的垃圾回收主要采用

14、的是引用计数。引用计数是一种内存管理技术,它通过引用计数器记录所有对象的引用数量,当对象的引用计数器数值为0时,就会将该对象视为垃圾进行回收。 析构方法getrefcount()函数是sys模块中用于统计对象引用数量的函数,其返回结果通常比预期的结果大1。这是因为getrefcount()函数也会统计临时对象的引用。 析构方法当一个对象的引用计数器数值为0时,就会调用_del_()方法,这个方法就是类的析构方法。import sysclass Destruction: def _del_(self): print(对象被释放)destruction = Destruction()print(s

15、ys.getrefcount(destruction) 过渡页01 面向对象02 类与对象03 构造方法与析构方法04 类方法和静态方法05 实例1:银行管理系统06 继承 类方法形似7.2.2中直接定义、只比普通函数多一个self参数的方法称为实例方法,它只能通过类实例化的对象调用。class Car: wheels = 4 # 属性 def drive(self): # 实例方法 print(开车方式) 类方法类方法与实例方法有以下不同:类方法类方法实例方法实例方法使用装饰器classmethod修饰类方法的第一个参数为cls,它代表类本身实例方法的第一个参数为self,它代表对象本身即可

16、由对象调用,亦可直接由类调用只能由对象调用可以修改类属性无法修改类属性 类方法类方法可以被类名或对象名调用,其语法格式如下:定义类方法类名.类方法对象名.类方法 类方法在实例方法中无法修改类属性的值,但在类方法中可以修改类属性的值。修改类属性class Apple(object): count = 0 def add_one(self): self.count = 1 classmethod def add_two(cls): cls.count = 2 apple = Apple()apple.add_one() print(Apple.count) Apple.add_two()print

17、(Apple.count)02 静态方法静态方法与实例方法有以下不同:静态方法静态方法实例方法实例方法使用装饰器staticmethod修饰方法中需要以“类名.方法/属性名”的形式访问类的成员方法中需要以“self.方法/属性名”的形式访问类的成员即可由对象调用,亦可直接由类调用只能由对象调用 静态方法定义一个包含属性num与静态方法static_method()的类Example。class Example: num = 10 # 类属性 staticmethod # 定义静态方法 def static_method(): print(f类属性的值为:Example.num) print(-

18、静态方法) 过渡页01 面向对象02 类与对象03 构造方法与析构方法04 类方法和静态方法05 实例1:银行管理系统06 继承 实例1:银行管理系统银行管理系统是一个集开户、查询、取款、存款、转账、锁定、解锁、退出等一系列的功能的管理系统。开户开户查询查询取款取款存款存款转账转账锁定锁定解锁解锁退出退出 实例1:银行管理系统本实例要求编写程序,实现一个具有上述功能的银行管理系统。 过渡页01 面向对象02 类与对象03 构造方法与析构方法04 类方法和静态方法05 实例1:银行管理系统06 继承 单继承Python中类与类之间具有继承关系,其中被继承的类称为父类或基类,继承的类称为子类或派生

19、类。子类在继承父类时,会自动拥有父类中的方法和属性。 单继承单继承指的是子类只继承一个父类,其语法格式如下:class 子类(父类) 单继承定义一个表示两栖动物的父类Amphibian和一个表示青蛙的子类Frog。class Amphibian: name = 两栖动物 def features(self): print(幼年用鳃呼吸) print(成年用肺兼皮肤呼吸)class Frog(Amphibian): def attr(self): print(f青蛙是self.name) print(我会呱呱叫)frog = Frog()print(frog.name)frog.features

20、()frog.attr() 多继承多继承指的是一个子类继承多个父类,其语法格式如下:class 子类(父类A, 父类B, .): 多继承定义English类、Math类与Student类,使Student类继承English类与Math类。class English: def eng_know(self): print(具备英语知识。)class Math: def math_know(self): print(具备数学知识。)class Student(English, Math): def study(self): print(学生的任务是学习。) 方法的重写子类可以继承父类的属性和方法,

21、若父类的方法不能满足子类的要求,子类可以重写父类的方法,以实现理想的功能。class Felines: def speciality(self): print(猫科动物特长是爬树)父类定义如下:父类定义如下:class Cat(Felines): name = 猫 def speciality(self): print(fself.name会抓老鼠) print(fself.name会爬树)子类子类定义如下:定义如下: super()函数如果子类重写了父类的方法,但仍希望调用父类中的方法,那么可以使用super()函数实现。super().方法名() 过渡页07 实例2:井字棋08 多态 实例

22、2:井字棋井字棋游戏有两名玩家,其中一个玩家画圈,另一个玩家画叉,轮流在3 * 3格子上画上自己的符号,最先在横向、纵向或斜线方向连成一条线的人为胜利方。 实例2:井字棋本实例要求编写程序,实现具有人机交互功能的井字棋。 过渡页07 实例2:井字棋08 多态 多态在Python中,多态指在不考虑对象类型的情况下使用对象。相比于强类型,Python更推崇“鸭子类型”。 “鸭子类型”是这样推断的:如果一只生物走起路来像鸭子,游起泳来像鸭子,叫起来也像鸭子,那么它就可以被当做鸭子。也就是说,“鸭子类型”不关注对象的类型,而是关注对象具有的行为。 多态Python中并不需要显式指定对象的类型,只要对象

23、具有预期的方法和表达式操作符,就可以使用对象。class Rabbit(Animal): def move(self): print(兔子蹦蹦跳跳)class Snail(Animal): def move(self): print(蜗牛缓慢爬行)def test(obj): obj.move()Rabbit和Snail类中都有move()方法,都可以传递给test()函数 本章主要介绍的是关于面向对象程序设计的知识,包括面向对象概述、类和对象的关系、类的定义与访问、对象的创建与使用、类成员的访问限制、构造方法与析构方法、类方法和静态方法、继承、多态等知识。通过本章的学习,希望读者理解面向对象的思想,能熟练地定义和使用类,并具备开发面向对象项目的能力。本章小结

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

当前位置:首页 > 应用文书 > 工作计划

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

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