Python程序设计课件第7章面向对象程序设计.pptx

上传人(卖家):晟晟文业 文档编号:3714455 上传时间:2022-10-06 格式:PPTX 页数:57 大小:1.19MB
下载 相关 举报
Python程序设计课件第7章面向对象程序设计.pptx_第1页
第1页 / 共57页
Python程序设计课件第7章面向对象程序设计.pptx_第2页
第2页 / 共57页
Python程序设计课件第7章面向对象程序设计.pptx_第3页
第3页 / 共57页
Python程序设计课件第7章面向对象程序设计.pptx_第4页
第4页 / 共57页
Python程序设计课件第7章面向对象程序设计.pptx_第5页
第5页 / 共57页
点击查看更多>>
资源描述

1、 类和对象类和对象 类的继承和多态类的继承和多态 综合应用案例综合应用案例第七章 面向对象程序设计参考书目Python 程序设计目录 面向对象程序设计的面向对象程序设计的3个基本特性个基本特性 类和对象类和对象 类的继承和多态类的继承和多态 综合应用案例综合应用案例这里说明图片内容 面向对象程序设计的3个基本特性类是面向对象的实现手类是面向对象的实现手段段。面向对象是程序开发领域中的重要思想,这种思想模拟了人类认识客观世界的逻辑,是当前计算机软件工程学的主流方法。面向对象程序设计的3个基本特性1 封装性封装(encapsulation)封装是面向对象的核心思想,将对象的属性和行为封装起来,不需

2、要让外界知道具体实现细节,这就是封装思想。面向对象程序设计的3个基本特性2 继承性继承(inheritance)继承描述的是类与类之间的关系,通过继承,新生类可以在无需赘写原有类的情况下,对原有类的功能进行扩展。汽汽车类车类普通特性与功能轿车类轿车类普通特性与功能其它特性与功能继承继承面向对象程序设计的3个基本特性3 多态性多态(polymorphism)多态指同一个属性或行为在父类及其各派生类中具有不同的语义。类和对象从具体的事物中把共同的特征抽取出来,形成一般的概念称为“归类”,忽略事物的非本质特牲,关注与目标有关的本质特征,找出事物间的共性,抽象出一个概念模型,就是定义一个类。类(cla

3、ss)动物类动物类类和对象在面向对象的方法中,类是具有相同属性和行为的一组对象的集合,它提供一个抽象的描述,其内部包括属性和方法两个主要部分,它就像一个模具,可以用它铸造一个个具体的铸件。类(class)类和对象对象是现实世界中可描述的事物,它可以是有形的也可以是无形的,从一本书到一家图书馆,从单个整数到繁杂的序列等都可以称为对象。对象(object)类和对象对象是构成世界的一个独立单位,它由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一个独立整体。对象(object)数据对象操作类和对象1 类的定义和使用类中可以定义数据成员和成员函数,数据成员用于描述对象特征,成员函数用于

4、描述对象行为,其中数据成员也被称为属性,成员函数也被称为方法。class 类名:属性名=属性值 def 方法名(self):方法体类和对象1 类的定义和使用类定义完成后不能直接使用,这就好比画好了一张房屋设计图纸,此图纸只能帮助人们了解房屋的结构,但不能提供居住场所。为满足居住需求,需要根据房屋设计图纸搭建实际的房屋。同理,程序中的类需要实例化为对象才能实现其意义。类和对象2 构造函数(方法)与析构函数(方法)每个类都有一个默认的_init_()方法。如果定义类时显式地定义_init_()方法,则创建对象时Python解释器会调用显式定义的_init_()方法;如果定义类时没有显式定义_ini

5、t_()方法,那么Python解释器会调用默认的_init_()方法。类和对象2 构造函数(方法)与析构函数(方法)_init_()方法按照参数的有无(self除外)可分为有参构造方法和无参构造方法。无参构造方法无参构造方法无参构造方法中可以为属性设置初始值,此时使用该方法创建的所有对象都具有相同的初始值。有参有参构造方法构造方法有参构造方法中可以使用参数为属性设置初始值,此时使用该方法创建的所有对象都具有不同的初始值。类和对象2 构造函数(方法)与析构函数(方法)前面在类中定义的属性是类属性,可以通过对象或类进行访问;在构造方法中定义的属性是实例属性,只能通过对象进行访问。类和对象2 构造函

6、数(方法)与析构函数(方法)定义一个类Information,在该类中显式地定义一个带有3个参数的_init_()方法。class Inforamtion(object):def _init_(self,name,sex):self.name=name self.sex=sexinfomation=Inforamtion(李婉,女)类和对象2 构造函数(方法)与析构函数(方法)在介绍析构方法之前,先来了解Python的垃圾回收机制。Python中的垃圾回收主要采用的是引用计数。引用计数是一种内存管理技术,它通过引用计数器记录所有对象的引用数量,当对象的引用计数器数值为0时,就会将该对象视为垃圾

7、进行回收。类和对象2 构造函数(方法)与析构函数(方法)getrefcount()函数是sys模块中用于统计对象引用数量的函数,其返回结果通常比预期的结果大1。这是因为getrefcount()函数也会统计临时对象的引用。类和对象2 构造函数(方法)与析构函数(方法)当一个对象的引用计数器数值为0时,就会调用_del_()方法,这个方法就是类的析构方法。import sysclass Destruction:def _del_(self):print(对象被释放)destruction=Destruction()print(sys.getrefcount(destruction)类和对象3 创

8、建类的方法与成员访问1.创建实例方法并访问实例方法实例方法是指在类中定义的函数。该函数是一种在类的实例上操作的函数。同_init_()方法一样,实例方法的第一个参数必须是self,并且必须包含一个self参数。functionName:指定方法名,使用小写字母开头;self:必要参数,类的实例,其名称可以是self以外的单词;parameterlist:指定除self参数以外的参数,各参数间使用逗号“,”进行分隔;functionbody:方法体,实现的具体功能。def functionName(self,parameterlist):functionbody类和对象3 创建类的方法与成员访问

9、2.创建数据成员(属性)并访问 数据成员是指在类中定义的变量,即属性(对象的特征)。根据定义位置,属性(成员变量)有两种:一种是实例属性,另一种是类属性(类变量)。实例属性是在构造函数_init_(以两个下划线“_”开头和结束)中定义的,定义时以self作为前缀;类属性是在类中方法之外定义的属性。类属性属于类可通过类名访问,也可以通过对象名访问,为类的所有实例共享。类和对象3 创建类的方法与成员访问2.创建数据成员(属性)并访问(1)类属性类属性是指定义在类中,并且在函数体外的属性。类属性可以在类的所有实例之间共享值,也就是在所有实例化的对象中公用。类属性既可以在类外面添加和访问,也能在类里面

10、添加和访问。添加与访问方式有三种:1)类外面添加对象属性对象名.属性名=值rect.width=50rect.height=80类和对象3 创建类的方法与成员访问2.创建数据成员(属性)并访问2)类外面获取对象属性3)类里面获取对象属性print(矩形宽度是,rect.width)self.属性名类和对象3创建类的方法与成员访问2.创建数据成员(属性)并访问 在Python中除了可以通过类名称访问类属性,还可以动态地为类和对象添加属性、修改类属性。修改后的结果将作用于该类的所有实例。类属性只能通过类对象修改,不能通过实例对象修改,如果通过实例对象修改类属性,表示的是创建了一个实例属性。(2)实

11、例属性实例属性是指定义在类的方法中的属性,只作用于当前实例中。实例的属性只能通过实例名访问。如果通过类名访问实例属性,将抛出异常。类和对象4访问限制:私有成员与公有成员类中定义的属性和方法默认为公有属性和方法,该类的对象可以任意访问类的公有成员。为了契合封装原则,保证类中的代码不被外部代码轻易访问。Python支持将类中的成员设置为私有成员,在一定程度上限制对象对类成员的访问。类和对象4访问限制:私有成员与公有成员定义私有成员Python通过在类成员名之前添加双下划线(_)来限制成员的访问权限,语法格式如下:_属性名_方法名类和对象4访问限制:私有成员与公有成员定义私有成员例如,定义一个包含私

12、有属性_weight和私有方法_info()的类PersonInfo。class PersonInfo:_weight=55#私有属性 def _info(self):#私有方法 print(f我的体重是:_weight)类和对象4访问限制:私有成员与公有成员私有成员的访问创建PersonInfo类的对象person,通过该对象访问类的属性:person=PersonInfo()person._weightAttributeError:PersonInfo object has no attribute _weight类和对象4访问限制:私有成员与公有成员私有成员的访问注释访问私有属性的代码,

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

14、.get_weight()私有属性可在公有方法中通过指代对象本身的默认参数“self”访问,类外部可通过公有方法间接获取类的私有属性。类和对象4访问限制:私有成员与公有成员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”访问。类和对象5类代码块Cla

15、ss语句和for、while语句一样,都是代码块,即定义类就是执行代码块。执行上述代码后,会输出“class block”。在class代码中可以包含任何语句。如果这些语句时可以立即执行的,那就就会立刻执行,比如print函数。除此之外,还可以动态向class代码块中添加新的成员。class MyClass:print(class block)类和对象6特殊方法:静态方法和类方法直接定义、只比普通函数多一个self参数的方法称为实例方法,它只能通过类实例化的对象调用。class Car:wheels=4#属性 def drive(self):#实例方法 print(开车方式)类和对象6特殊方法

16、:静态方法和类方法类方法类方法实例方法实例方法使用装饰器classmethod修饰类方法的第一个参数为cls,它代表类本身实例方法的第一个参数为self,它代表对象本身即可由对象调用,亦可直接由类调用只能由对象调用可以修改类属性无法修改类属性类方法与实例方法有以下不同:类和对象6特殊方法:静态方法和类方法类方法可以被类名或对象名调用,其语法格式如下:定义类方法类名.类方法对象名.类方法 类和对象6特殊方法:静态方法和类方法在实例方法中无法修改类属性的值,但在类方法中可以修改类属性的值。修改类属性class Apple(object):count=0 def add_one(self):self

17、.count=1 classmethod def add_two(cls):cls.count=2 apple=Apple()apple.add_one()print(Apple.count)Apple.add_two()print(Apple.count)02类和对象6特殊方法:静态方法和类方法静态方法与实例方法有以下不同:静态方法静态方法实例方法实例方法使用装饰器staticmethod修饰方法中需要以“类名.方法/属性名”的形式访问类的成员方法中需要以“self.方法/属性名”的形式访问类的成员即可由对象调用,亦可直接由类调用只能由对象调用类和对象6特殊方法:静态方法和类方法定义一个包含

18、属性num与静态方法static_method()的类Example。class Example:num=10#类属性 staticmethod#定义静态方法 def static_method():print(f类属性的值为:Example.num)print(-静态方法)类和对象7单例模式在创建类时,确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是一种对象创建型模式。比如:我们日常使用的电脑上都有一个回收站,在整个操作系统中,回收站只能有一个实例,整个系统都使用这个唯一的实例,而且回收站自行提供自己的实例。因此回收站是单例模式的应用。类和对象7

19、函数和方法的区别1)函数的分类:内置函数:python内嵌的一些函数。递归函数:直接或间接调用函数本身。匿名函数:一行代码实现一个函数功能。自定义函数:根据自己的需求,来进行定义函数。03010402类和对象7函数和方法的区别2)方法分类:类方法:通过类名的调用去操作公共模板中的属性和方法。普通方法:直接用self调用的方法。属性方法:property,将方法伪装成为属性,让代码看起来更合理静态方法:不用传入类空间、对象的方法,作用是保证代码的一致性,规范性,可以完全独立类外的一个方法,但是为了代码的一致性统一的放到某个模块(py文件)中。私有方法:_函数名,只能在类中被调用的方法。特殊方法(

20、双下划线方法):以_init_为例,是用来封装实例化对象的属性,只要是实例化对象就一定会执行_init_方法。010304050602类和对象7函数和方法的区别从作用域的角度来分析:(1)函数作用域)函数作用域:从函数调用开始至函数执行完成,返回给调用者后,在执行过程中开辟的空间会自动释放,也就是说函数执行完成后,函数体内部通过赋值等方式修改变量的值不会保留,会随着返回给调用者后,开辟的空间会自动释放。(2)方法作用域方法作用域:通过实例化的对象进行方法的调用,调用后开辟的空间不会释放,也就是说调用方法中对变量的修改值会一直保留。调用的方式不同:(1)函数函数:通过“函数名()”的方式进行调用

21、,直接使用类名去调用(2)方法方法:通过“对象.方法名”的方式进行调用,即类实例化出来去调用类的继承和多态 继承是为代码复用和设计复用而设计的,是面向对象程序设计的重要特性之一。当我们设计一个新类时,如果可以继承一个已有的设计良好的类然后进行二次开发,无疑会大幅度减少开发工作量。类的继承和多态1类的继承Python中类与类之间具有继承关系,其中被继承的类称为父类或基类,继承的类称为子类或派生类。子类在继承父类时,会自动拥有父类中的方法和属性。类的继承和多态1 类的继承单继承指的是子类只继承一个父类,其语法格式如下:class 子类(父类)类的继承和多态1 类的继承定义一个表示两栖动物的父类Am

22、phibian和一个表示青蛙的子类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()frog.attr()类的继承和多态2类的多继承多继承指的是一个子类继承多个父类,其语法格式如下:class 子类(父类A,父类B,.):类的继承和多态2类的多继承定义English类、

23、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(学生的任务是学习。)类的继承和多态3方法重写子类可以继承父类的属性和方法,若父类的方法不能满足子类的要求,子类可以重写父类的方法,以实现理想的功能。class Felines:def speciality(self):print(猫科

24、动物特长是爬树)父类定义如下:父类定义如下:class Cat(Felines):name=猫 def speciality(self):print(fself.name会抓老鼠)print(fself.name会爬树)子类子类定义如下:定义如下:类的继承和多态3方法重写如果子类重写了父类的方法,但仍希望调用父类中的方法,那么可以使用super()函数实现。super().方法名()类的继承和多态4多态与多态性在Python中,多态指在不考虑对象类型的情况下使用对象。相比于强类型,Python更推崇“鸭子类型”。“鸭子类型”是这样推断的:如果一只生物走起路来像鸭子,游起泳来像鸭子,叫起来也像鸭

25、子,那么它就可以被当做鸭子。也就是说,“鸭子类型”不关注对象的类型,而是关注对象具有的行为。类的继承和多态4多态与多态性Python中并不需要显式指定对象的类型,只要对象具有预期的方法和表达式操作符,就可以使用对象。class Rabbit(Animal):def move(self):print(兔子蹦蹦跳跳)class Snail(Animal):def move(self):print(蜗牛缓慢爬行)def test(obj):obj.move()Rabbit和Snail类中都有move()方法,都可以传递给test()函数类的继承和多态4多态与多态性2.多态性 多态性是指具有不同功能的

26、函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。类的继承和多态5接口 在很多面向对象的语言(如Java、C#等)中都有接口的概念。接口其实就是一个规范,指定了一个类中都有哪些成员。接口常被用于多态中,一个类可以有多个接口,也就是有多个规范。不过Python语言中并没有这些内容,在调用一个对象的方法时,就假设这个方法在对象中存在。比较稳妥的方法时

27、调用之前先通过hasattr(object,name)函数判断一下,如果方法在对象中存在,该函数返回True,否则返回False。除了可以使用hasattr函数判断对象中是否存在某个成员外,还可以使用getattr函数实现同样的功能。类的继承和多态6运算符重载可通过运算符重载来实现对象之间的运算。Python把运算符与类的方法关联起来,每个运算符对应一个函数,因此重载运算符就是实现函数。常用的运算符与函数方法的对应关系如表所示。函数方法重载的运算符说 明调用举例_add_+加法Z=X+Y,X+Y_sub_-减法Z=X-Y,X-=y_mul_*乘法Z=X*Y,X*=Y_div_/除法Z=X/Y,

28、X/=y_lt_小于XY_ep_=等于X=Y_len_长度对象长度len(X)_str_输出输出对象时调用Print(X),str(X)_or_或或运算XIY,XI=Y思考与练习1简述面向对象程序设计的概念及类和对象的关系,在Python语言中如何声明类和定义对象?2设计一个立方体类Box,定义三个属性,分别是长,宽,高。定义二个方法,分别计算并输出立方体的体积和表面积。3定义一个圆柱体类Cylinder,包含底面半径和高两个属性(数据成员);包含一个可以计算圆柱体体积的方法。然后编写相关程序测试相关功能。4定义一个学生类,包括学号、姓名和出生日期三个属性(数据成员);包括一个用于给定数据成员初始值的构造函数;包含一个可计算学生年龄的方法。编写该类并对其进行测试。5定义一个shape类,利用它作为基类派生出Rectangle、Circle等具体形状类,已知具体形状类均具有两个方法GetArea和GetColor,分别用来得到形状的面积和颜色。最后编,写一个测试程序对产生的类的功能进行验证。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(Python程序设计课件第7章面向对象程序设计.pptx)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|