Python语言实用教程第6章-面向对象程序设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Python语言实用教程第6章-面向对象程序设计课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 语言 实用教程 面向 对象 程序设计 课件
- 资源描述:
-
1、 Python语言支持面向对象程序设计。类和对象是面向对语言支持面向对象程序设计。类和对象是面向对象编程技术中最基本、最核心的概念与内容。本章将介绍象编程技术中最基本、最核心的概念与内容。本章将介绍Python语言面向对象程序设计相关的基本概念、类的声明、语言面向对象程序设计相关的基本概念、类的声明、对象的创建与使用等内容。利用继承不仅使得代码的重用性对象的创建与使用等内容。利用继承不仅使得代码的重用性得以提高,还可以清晰描述事物间的层次分类关系。得以提高,还可以清晰描述事物间的层次分类关系。Python提供了多继承机制,通过继承父类,子类可以获得父类所拥提供了多继承机制,通过继承父类,子类可
2、以获得父类所拥有的方法和属性,并可以添加新的属性和方法来满足新事物有的方法和属性,并可以添加新的属性和方法来满足新事物的需求。简单来说,多态(意思是多种形式)就意味着父类的需求。简单来说,多态(意思是多种形式)就意味着父类型的变量可以引用子类型的对象,多态性也意指不同类型的型的变量可以引用子类型的对象,多态性也意指不同类型的对象可以响应相同的消息。对象可以响应相同的消息。Python语言中可谓一切皆对象语言中可谓一切皆对象。学习重点或难点:学习重点或难点:类的定义和使用类的定义和使用 对象的创建和使用对象的创建和使用 实例属性与类属性实例属性与类属性 方法方法 继承机制继承机制 多态和封装多态
3、和封装6.1 面向对象概述面向对象概述6.2 类与对象类与对象6.3 实例属性与类属性实例属性与类属性6.4 方法方法6.5 继承继承6.6 多态和封装多态和封装6.7 应用实例应用实例面向对象技术基本概念有:面向对象技术基本概念有:类类(Class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象对象(Object):通过类定义的数据结构实例。对象包括两类数据成员(类变量和实例变量)和方法。实例化:实例化:创建一个类的实例,类的具体对象。类变量:类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用
4、。数据成员:数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。方法:方法:类中定义的函数。方法重载:方法重载:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(Override),也称为方法的重载。实例变量:实例变量:定义在方法中的变量,只作用于当前类的实例。继承:继承:即一个派生类(Derived Class)继承基类(Base Class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。类的实例化为对象,创建了类才能由类创建对类的实例化为对象,创建了类才能由类创建对象。类与对象是面向对象程序设计的核心概念。象。类与对象是面向对象程
5、序设计的核心概念。使用使用class语句来创建一个新类,语句来创建一个新类,class之后为类之后为类的名称并以冒号结尾,语法如下:的名称并以冒号结尾,语法如下:class ClassName:Optional class documentation string#类类帮助帮助文档文档 class_suite#类体类体类的帮助信息可以通过类的帮助信息可以通过ClassName._doc_查看。在函数、类或者文件开头的部分写查看。在函数、类或者文件开头的部分写文档字符串说明,一般采用三重引号。文档字符串说明,一般采用三重引号。class_suite 由类成员、方法由类成员、方法、数据属性等组成。
6、、数据属性等组成。class Employee:雇员通用基类 empCount=0 def _init_(self,name,salary):self.name=name self.salary=salary Employee.empCount+=1 def displayCount(self):print(TotalEmployee%d%Employee.empCount)def displayEmployee(self):print(Name:,self.name,Salary:,self.salary)一个简单的一个简单的Python类类 要创建一个类的实例,你可以使用类的名称,并要创建
7、一个类的实例,你可以使用类的名称,并通过通过_init_方法接受参数。方法接受参数。emp1=Employee(Zara,2000)#创建类创建类Employee的第的第1个对象个对象emp1 emp2=Employee(Manni,5000)#创建类创建类Employee的第的第2个对象个对象emp2 可以使用点可以使用点(.)来访问对象的方法或属性。也来访问对象的方法或属性。也可以使用如下类的名称访问类变量:可以使用如下类的名称访问类变量:emp1.displayEmployee();emp2.displayEmployee()print(Total Employee%d%Employee
8、.empCount)还可以添加、删除、修改类的属性,如下所示:还可以添加、删除、修改类的属性,如下所示:emp1.age=7#添加一个添加一个 age 属性,这种方式是属性,这种方式是Python特有的特有的emp1.age=8#修改修改 age 属性属性del emp1.age#删除删除 age 属性属性 同同Java语言一样,语言一样,Python使用了引用计数这一简使用了引用计数这一简单技术来追踪内存中的对象。单技术来追踪内存中的对象。在在Python内部记录着所有使用中的对象各有多少内部记录着所有使用中的对象各有多少引用。引用。一个内部跟踪变量,称为一个引用计数器。当对一个内部跟踪变量
9、,称为一个引用计数器。当对象被创建时,就创建了一个引用计数,当这个对象不象被创建时,就创建了一个引用计数,当这个对象不再需要时,也就是说,这个对象的引用计数变为再需要时,也就是说,这个对象的引用计数变为0 时时,它被垃圾回收。但是回收不是,它被垃圾回收。但是回收不是立即立即的,由解释器的,由解释器在适当的时机,将垃圾对象占用的内存空间回收。在适当的时机,将垃圾对象占用的内存空间回收。a=40#创建对象创建对象 b=a#增加引用增加引用 的计数的计数c=b#增加引用增加引用 的计数的计数del a#减少引用减少引用 的计数的计数b=100#减少引用减少引用 的计数的计数c0=-1#减少引用减少引
10、用 的计数的计数 Python一切皆对象一切皆对象,每个对象都可能有多个,每个对象都可能有多个属性。一个类实例化后,实例是一个对象,有属性属性。一个类实例化后,实例是一个对象,有属性(实例属性实例属性)。同样,类也是一个对象,它也有属性。同样,类也是一个对象,它也有属性(类属性类属性)。class A(object):.x=7 .def _init_(self,y).self.y=y .A.x#7 在类在类A中,变量中,变量x所引用的数据,能够直接通过类来调所引用的数据,能够直接通过类来调用。或者说用。或者说x是类是类A的属性,这种属性称为的属性,这种属性称为“类属性类属性”。类。类属性仅限于
11、此属性仅限于此类中的变量。它也有其他的名字,如静类中的变量。它也有其他的名字,如静态数据。态数据。类有一些缺省或预置的属性,叫作内置类属性,有如下这些:类有一些缺省或预置的属性,叫作内置类属性,有如下这些:1)_dict_:类的属性(包含一个字典,由类的数据属性组成);类的属性(包含一个字典,由类的数据属性组成);2)_doc_:类的文档字符串;:类的文档字符串;3)_name_:类名;类名;4)_module_:类定义所在的模块(类的全名是类定义所在的模块(类的全名是_main_.className,如果类位于一个导入模块,如果类位于一个导入模块mymod中,那么中,那么className.
12、_module_ 等于等于 mymod););5)_bases_:类的所有父类构成元素(由所有父类组成的元组)类的所有父类构成元素(由所有父类组成的元组)实例(或对象)的属性储存在对象的实例(或对象)的属性储存在对象的_dict_属性属性中。中。_dict_为一个词典,键为属性名,对应的值为属为一个词典,键为属性名,对应的值为属性本身。为此,可以通过输出性本身。为此,可以通过输出_dict_这些内置属性来这些内置属性来查看对象属性等。示例详见书本。查看对象属性等。示例详见书本。方法与函数是一个概念,只是一般在类中的函方法与函数是一个概念,只是一般在类中的函数常称为方法。数常称为方法。在类的内部
13、,在类的内部,使用使用def关键字可以为类关键字可以为类定义一个方法定义一个方法,与一般函数定义不同,与一般函数定义不同,类方类方法必须包含参数法必须包含参数self,且为第一个参数且为第一个参数:class People:#定义类定义类People age=0;name=John#定义类属性定义类属性#这里这里name与与self.name是不同的是不同的 _weight=0#定义私有属性,私有属性在类外部无法直接进行访问定义私有属性,私有属性在类外部无法直接进行访问 def _init_(self,name,age,weight):#定义构造方法定义构造方法 self.name=name;
14、self.age=age self._weight=weight def speak(self):print(%s is speaking:I am%d years old.%(self.name,self.age)p=People(Tom,10,30);print(People.name,p.name)#John,Tomp.speak()#Tom is speaking:I am 10 years old 类里面的函数,第一个参数是类里面的函数,第一个参数是self,但,但是在实例化的时候,似乎没有这个参数什么是在实例化的时候,似乎没有这个参数什么事儿,那么事儿,那么self是干什么的呢?是
15、干什么的呢?self是一个很是一个很神奇的参数。神奇的参数。在在People实例化的过程中实例化的过程中p=People(Tom,10,30),字符,字符串串Tom等通过初始化函数(等通过初始化函数(_init_())的参数已经存入到内)的参数已经存入到内存中,并且以存中,并且以People类型的形式存在,组成了一个对象,这类型的形式存在,组成了一个对象,这个对象和变量个对象和变量p建立引用关系。这个过程也可说成这些数据建立引用关系。这个过程也可说成这些数据附加到一个实例上。这样就能够以附加到一个实例上。这样就能够以:object.attribute的形式,的形式,在程序中任何地方调用某个数据
16、,例如上面的程序中以在程序中任何地方调用某个数据,例如上面的程序中以p.name的方式得到的方式得到Tom。这种调用方式,在类和实例中经。这种调用方式,在类和实例中经常使用,点号常使用,点号“.”后面的称之为类或者实例的属性。这是在后面的称之为类或者实例的属性。这是在程序中,并且是在类的外面。如果在类的里面,想在某个地程序中,并且是在类的外面。如果在类的里面,想在某个地方使用实例化所传入的数据(如:方使用实例化所传入的数据(如:Tom),怎么办?),怎么办?在类内部,就是将所有传入的数据都赋给一个在类内部,就是将所有传入的数据都赋给一个变量,通常这个变量的名字是变量,通常这个变量的名字是sel
17、f。在初始化函数中的第一个参数在初始化函数中的第一个参数self,就是起到了,就是起到了这个作用这个作用接收实例化过程中传入的所有数据,这接收实例化过程中传入的所有数据,这些数据是初始化函数后面的参数导入的些数据是初始化函数后面的参数导入的。显然,。显然,self应该就是一个实例(准确说法是应用实例),因为它应该就是一个实例(准确说法是应用实例),因为它所对应的就是具体数据。这个可以通过在所对应的就是具体数据。这个可以通过在_init_()函函数中通过数中通过print(self)或或print(type(self)来输出验证。来输出验证。self这个实例跟前面说的那个这个实例跟前面说的那个p
18、所引用的实例对象所引用的实例对象一样,也有属性。那么,接下来就规定其属性和属性一样,也有属性。那么,接下来就规定其属性和属性对应的数据。上面代码中:对应的数据。上面代码中:self.name=name 就是规定了就是规定了self实例的一个属性,这个属性的名实例的一个属性,这个属性的名字也叫做字也叫做name,这个属性的值等于初始化函数的参,这个属性的值等于初始化函数的参数数name所导入的数据。注意,所导入的数据。注意,self.name中的中的name和和初始化函数的参数初始化函数的参数name没有任何关系,它们两个一没有任何关系,它们两个一样,只不过是一种起巧合(经常巧合,其实是为了省样
19、,只不过是一种起巧合(经常巧合,其实是为了省事和以后识别方便,故意让它们巧合。)事和以后识别方便,故意让它们巧合。)_private_method 两个下划线开头,声明两个下划线开头,声明该方法为私有方法,不能在类地外部调用。该方法为私有方法,不能在类地外部调用。在类的内部调用在类的内部调用self._private_methods。类的专有方法:类的专有方法:私有方法介绍请查看:私有方法介绍请查看:https:/docs.Python.org/2.7/reference/datamodel.html#special-method-names 或https:/docs.Python.org/3
20、.6/reference/datamodel.html#special-method-names _init_(self,.)就是类的构造方法就是类的构造方法(函数函数)或初或初始化方法始化方法(函数函数),该方法在创建类对象(类的实例化,该方法在创建类对象(类的实例化)时自动调用。)时自动调用。def _init_(self):self.data=_del_(self)就是类的析构方法就是类的析构方法(函数函数),_del_(self)在对象消逝的时候被自动调用。在对象消逝的时候被自动调用。例如:例如:已知,类的方法(或实例方法)第一个参数必须是已知,类的方法(或实例方法)第一个参数必须是s
21、elf,并且如果要调用类的方法,必须将通过类的实例,即方法并且如果要调用类的方法,必须将通过类的实例,即方法绑定实例后才能由实例调用。如果调用不绑定方法,一般绑定实例后才能由实例调用。如果调用不绑定方法,一般在继承关系的类之间,可以用在继承关系的类之间,可以用super函数等方法调用。函数等方法调用。1、静态方法、静态方法 在类定义前出现在类定义前出现staticmethod,表示下面的方法是静,表示下面的方法是静态方法。态方法。2、类方法、类方法 在类定义前出现在类定义前出现classmethod,表示下面的方法是类方,表示下面的方法是类方法。法。命名空间是从所定义的命名到对象的映射集合命名
展开阅读全文