《Python程序设计》教学课件—05面向对象编程.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《Python程序设计》教学课件—05面向对象编程.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python程序设计 Python 程序设计 教学 课件 05 面向 对象 编程
- 资源描述:
-
1、5.1.1 类和对象的概念对象(Object)抽象为类(Class)的过程,是在系统分析阶段完成的。在现实世界中,先有一个一个具体的对象,然后将对象进行分类,总结出类。在程序中,必须先定义类,后调用类来产生对象。类并不能直接使用,通过类创建出的实例(又称对象)才能使用。5.1.2 类的定义在编程时,使用类的顺序是:先定义(创建)类,然后再创建类的对象(实例),通过对象实现特定的功能。Python中,创建一个类使用class关键字实现,其基本语法格式如下:class 类名: 类的成员1 类的成员n5.1.3 类的成员在类的定义中,类的成员可以分为3种:类变量、方法和属性。属性在“5.2类的封装”
2、介绍,这里先介绍类变量和方法。1类变量Python中,类中的变量分为:类变量和实例变量。这里介绍类变量。在类体中定义的变量称为类变量(也称类字段、成员字段、成员变量),类变量也是广义上的属性,称为类属性。格式如下。class 类名: 类变量名 = 初值 类的其他成员说明:1)类变量是指在类中,且在方法之外定义的变量。2)初值表示该字段的初始状态,例如:student_age = 18 #年龄,整型,初值18岁2实例方法在类的内部,使用def关键字定义实例方法,语法格式如下。class 类名: 类变量名 = 值 def 方法名(self, 形参1, 形参2, , 形参n) self.实例变量名
3、= 值 变量名 = 值 方法体 return 表达式 类的其他成员实例方法必须包含参数self,且为第一个参数,不能省略。【例5-1】定义学生类Student。属性:姓名name、性别gender、年龄age、班级grade。方法:显示学习的课程learn(course),course是显示的课程名称;显示考试的课程exam(course, score),course是课程,score是成绩。class Student: # 定义类 # 定义类变量 name = # 姓名 gender = 男 # 性别,默认“男” age = 18 # 年龄,默认18岁 grade = # 班级 # 定义实例
4、方法 def info(self): print(self.name, self.gender, self.age, self.grade) # 在方法中访问类变量使用self关键字 def learn(this, course): # 获取学习课程字符串的方法,形参course代表课程 return this.name + 正在学习 + course # self可以换成任何标识符,这里是this def exam(self, course, score): # 获取考试课程字符串的方法,形参course代表课程,score代表成绩 string = self.name + course +
5、 的考试成绩是 + str(score) # 定义局部变量string return string【例5-2】计算长方体的体积和表面积。定义长方体类Cuboid。属性:长length、宽width、高height。方法:计算长方体的体积cubage,长方体的体积 =长宽高;计算长方体的表面积totalArea,长方体的表面积=(长宽+长高宽高)2。class Cuboid: #定义类变量 length = 0 #长 width = 0 #宽 height = 0 #高 # 定义实例方法 def cubage(self): #计算长方体的体积 return self.length * self.
6、width * self.height def total_area(self): #计算长方体的表面积 return (self.length * self.width + self.length * self.height + self.width * self.height) * 2【例5-2】计算长方体的体积和表面积。定义长方体类Cuboid。属性:长length、宽width、高height。方法:计算长方体的体积cubage,长方体的体积 =长宽高;计算长方体的表面积totalArea,长方体的表面积=(长宽+长高宽高)2。也可以把方法改成传参的形式,代码如下:class Cubo
7、id1: #定义实例方法 def cubage(self, length, width, height): #计算长方体的体积,形参:长,宽,高 return length * width * height def total_area(self, length, width, height): #计算长方体的表面积,形参:长,宽,高 return (length * width + length * height + width * height) * 25.1.4 创建对象1创建对象创建类的实例也称实例化一个类的对象,简称创建对象。对已创建的类进行实例化,其语法格式如下:类名()创建的对象
8、或实例赋值给一个变量,赋值后该变量就表示这个类的一个对象。其格式为:变量名(或称对象名) = 类名()例如,下面的代码创建Student类的实例,并赋给stu对象,对stu对象进行初始化。stu = Student() # 创建Student类的实例,并赋值给stu变量,stu变量的类型是类Student的类型2. 对象访问实例变量和实例方法(1)对象访问实例变量在主程序中(或类的外部),使用已创建的对象访问类中变量(实例变量或类变量)的语法格式如下:对象名.变量名注意:实例变量只能通过“对象名.实例变量名”访问,无法通过“类名.实例变量名”访问。为对象中的变量(实例变量或类变量)赋值的语法格
9、式如下:对象名.变量名 = 值(2)对象访问实例方法访问对象中实例方法的语法格式如下:对象名.方法名(实参1, 实参2, , 实参n)注意:对象名与实例变量名、方法名之间用点“.”连接。3. 类和对象应用示例【例5-3】通过在例5-1中已经定义的类,创建两个对象,分别是“刘强”和“王芳”。liuqiang = Student() #创建Student()类的一个对象,并赋值给liuqiang变量# 初始化类变量liuqiang.name = 刘强 #用“对象名.类变量”访问liuqiang.age = 19liuqiang.grade = 计算机科学2019# 调用方法liuqiang.inf
10、o() #显示liuqiang对象的基本信息print(liuqiang.learn(数学)print(liuqiang.exam(数学, 85)print() #显示一个空行,用于隔开两位学生的信息wangfang = Student() #创建Student()类的一个对象,并赋值给wangfang变量#初始化类变量wangfang.name = 王芳 wangfang.gender = 女wangfang.age = 18wangfang.grade = 哲学2019#调用方法wangfang.info()print(wangfang.learn(英语)print(wangfang.ex
11、am(英语, 96)【例5-4】在例5-2定义类的基础上,编写创建对象和调用属性、方法的代码。cu = Cuboid() # Cuboid()类的一个对象,并赋值给cu变量cu.length = 10 # 长cu.width = 20 # 宽cu.height = 30 # 高print(cu.cubage()print(cu.total_area()调用Cuboid1()中带参数的方法,代码如下:cu1 = Cuboid1() # Cuboid1()类的一个对象,并赋值给cu1变量print(cu1.cubage(10, 20, 30)print(cu1.total_area(10, 20,
12、 30)5.1.5 在类的内部调用实例方法在类的内部调用实例方法的格式为:self.方法名(实参1, 实参2, , 实参n)或类名.方法名(self, 实参1, 实参2, , 实参n)在类的内部调用实例方法,如果不使用类名调用方法,则方法名前使用self;如果使用类名调用方法,则实参列表中使用self。【例5-5】在类的内部和外部调用实例方法示例。class Human: def eat(self,name): self.name = name # 把形参name赋值给创建的实例变量self.name print(eat and %s % self.name) def drink(self):
13、 self.eat(drink) # 在类中访问方法:self.方法名() Human.eat(self,drink) # 在类中调用方法:类名.方法名(self) man = Human() # 创建对象man.drink() # 在类外调用方法,对象调用方法:对象名.方法名()5.1.6 构造方法1. 构造方法的概念当创建一个对象时,对象表示一个实体。例如,下面的代码st = Student() # 创建对象st.name = 张三 # 设置属性值,使该对象的name值为张三st.age = 18 # 设置属性值,使该对象的age值为18构造方法又叫构造函数、构造器,它是类的一种特殊的成员
14、方法,在创建类的新对象时自动调用构造方法。它主要用于在创建对象时初始化对象,即为对象成员变量赋初始值。2. 定义构造方法在创建类时,可以添加一个_init_()方法。该方法是一个特殊的类实例方法,称为构造方法。每个类都必须至少有一个构造方法。构造方法的语法格式如下:def _init_(self, 形参1, 形参2, , 形参n): self.实例变量名1 = 值1 self.实例变量名2 = 值2 方法体构造方法是类的一个特殊的成员方法,除了具有一般成员方法的特点外,它还有自己独有的特点。3. 调用构造方法在声明类时,一个类中会包默认的构造方法,也可能包含自定义构造方法。(1)调用默认构造方
15、法假设一个类包含默认的构造方法,则调用默认构造方法的语法如下。对象名 = 类名()(2)调用自定义构造方法自定义构造方法包括无参或有参构造函数。1)调用自定义无参构造方法。自定义无参构造方法的调用与默认构造方法的调用相同。2)调用有参构造方法。调用有参构造方法的语法如下。对象名 = 类名(实参1, 实参2, , 实参n)实参列表中的参数可以是数据对象、变量或表达式,参数之间用逗号分隔。例如,如下代码在创建Student对象时传入参数:st= Student(张三丰, 18)print(st.name, st.age)4. 构造方法实例【例5-6】在Student类的_init_()方法中,定义
16、两个实例变量gender和age,并且直接赋值。在创建Student的对象st时,采用无参数创建对象,它会隐式调用_init_()方法,然后Student类的对象st中的实例变量就被赋值了。class Student: def _init_(self): # 定义无参构造方法 print(调用构造方法) self.gender = 男 # self.gender表示gender是实例变量,通过“=”创建该实例变量 self.age = 18st = Student() # 创建对象,构造方法无参数print(st的性别:0,年龄:1.format(st.gender, st.age)【例5-7
17、】用_init_()方法传递参数。class Student: def _init_(self, name, gender, age): #定义有参构造方法,小括号中是定义的形参名 print(调用构造方法) self.name = name #“=”左边的name是定义的实例变量,右边的name是形参名 self.gender = gender self.age = agest = Student(王芳, 女, 19) #有参数创建对象print(st的姓名:0,性别:1,年龄:2.format(st.name, st.gender, st.age)【例5-8】对例5-2中的类,用_init
18、_()方法重新定义类。class Cuboid: def _init_(self, length, width, height): self.length = length # 实例变量作为属性用 self.width = width self.height = height def cubage(self): # 计算长方体的体积 return self.length * self.width * self.height # 访问实例变量 def total_area(self): # 计算长方体的表面积 return (self.length * self.width + self.len
19、gth * self.height + self.width * self.height) * 2if _name_=_main_ : cu = Cuboid(10, 20, 30) # 创建对象,用构造方法的参数初始化 print(cu.cubage() print(cu.total_area()【例5-9】定义一个两个数的加法类NumberAdd,通过_init_()方法初始化两个数,定义一个实例方法add()计算两个数的和。class NumberAdd: a = 5 #定义在类中但在函数体外的变量为类变量 def _init_(self, a, b): self.x = a #self
20、.x、self.y是实例变量 self.y = b #a、b是形参,a、b是本方法内的局部变量 print(a=0, b=1.format(a, b) print(self.x=0, self.y=1.format(self.x, self.y) print(self.a=, self.a) def add(self): #定义两个数相加的方法 sum = self.x + self.y #在类内访问实例变量 return sum print(a=, a) # 显示类变量a的值if _name_ = _main_ : a = 10 #加数 b = 20 #被加数 number = Number
21、Add(a, b) #创建对象并初始化 print(0 + 1 = 2.format(a, b, number.add() #显示两个数的和运行结果如下:a= 5a=10, b=20self.x=10, self.y=20self.a= 510 + 20 = 305.1.7 类变量、实例变量及其作用域1. 类变量类变量是指在类中且在方法之外定义的变量。在主程序中(或类的外部),类变量推荐用“类名.类变量名”访问,但也可以使用“对象名.类变量名”访问(此方式不推荐使用,即类变量通常不作为实例变量使用)。【例5-10】访问例5-1中定义的类变量name、gender、age和grade。Stude
22、nt.name = 刘强 #用“类名.类变量”访问Student.gender = 男Student.age = 19Student.grade = 计算机科学20192. 实例变量从实例化的角度来说,实例变量的定义为,实例化之后,每个实例(对象)单独拥有的变量叫作实例变量。实例变量是与某个类的实例相关联的数据值,这些值独立于其他实例或类。注意,实例变量只能通过对象名访问,无法通过类名直接访问。在方法中,只要以self定义的变量都是实例变量。实例变量的定义如下:self.变量名 = 值调用实例变量有如下两种方式。1)在类外通过对象直接调用。2)在类内通过self间接调用。【例5-11】类变量和
23、实例变量在访问和赋值后的不同。class Demo: aa = 我是类变量aa def func(self, name): self.bb = name #bb是实例变量if _name_ = _main_ : print(Demo.aa = , Demo.aa) Demo.aa = Demo类,为类变量aa第1次赋值 obj1 = Demo() #创建对象obj1 # obj1.aa = obj1对象,为实例变量aa赋值 #稍后取消注释 obj1.func(obj1对象,为实例变量bb赋值) print(Demo.aa = , Demo.aa) #显示类变量Demo.aa的值 print(o
24、bj1.aa = , obj1.aa) #显示对象obj1.aa的值 print(obj1.bb = , obj1.bb) #显示对象obj1.bb的值 print() obj2 = Demo() #创建对象obj2# obj2.aa = obj2对象,为实例变量aa赋值 #稍后取消注释 obj2.func(obj2对象,为实例变量bb赋值) Demo.aa = Demo类,为类变量aa第2次赋值 print(Demo.aa = , Demo.aa) #访问Demo.aa print(obj2.aa = , obj2.aa) #访问obj2.aa print(obj2.bb = , obj2.
25、bb) #访问obj2.bb print() print(id(Demo.aa) = , id(Demo.aa) #显示内存中的地址 print(id(obj1.aa) = , id(obj1.aa) print(id(obj2.aa) = , id(obj2.aa)3. 实例变量的作用域私有成员在类的外部不能直接访问,如果要在类的外部访问,只能通过调用类里面的公有成员方法间接访问,或者通过Python支持的特殊方式访问。【例5-12】在_init_()方法中初始化一个实例变量及一个私有的实例变量。定义一个给实例变量赋值的方法、一个给私有变量赋值的方法、一个得到实例变量的方法,以及一个得到私有
展开阅读全文