内容正文:
课程名称
第10章 面向对象(上)
计划学时
4学时
内容分析
本章主要介绍对象与类、类的定义、构造方法、析构方法、类方法、静态方法、运算符重载、小案例
教学目标
与
教学要求
要求学生理解对象与类的概念、掌握类的定义与对象的创建、掌握构造方法与析构方法、掌握类方法与静态方法、掌握运算符重载
教学重点
对象的创建、构造方法、析构方法、类方法、静态方法、运算符重载
教学难点
对象的创建、构造方法、析构方法、类方法、静态方法、运算符重载
教学方式
课堂讲解及ppt演示
教
学
过
程
第一课时
(对象与类、类的定义、构造方法)
对象与类
在现实世界中,随处可见的一种事物就是对象,对象是事物存在的实体,如学生、汽车等。人类解决问题的方式总是将复杂的事物简单化,于是就会思考这些对象都是由哪些部分组成的。通常都会将对象划分为两个部分,即静态部分与动态部分。顾名思义,静态部分就是不能动的部分,这个部分被称为“属性”,任何对象都会具备其自身属性,如一个人,其属性包括高矮、胖瘦、年龄、性别等。然而具有这些属性的人会执行哪些动作也是一个值得探讨的部分,这个人可以转身、微笑、说话、奔跑,这些是这个人具备的行为(动态部分),人类通过探讨对象的属性和观察对象的行为来了解对象。
在计算机世界中,面向对象程序设计的思想要以对象来思考问题,首先要将现实世界的实体抽象为对象,然后考虑这个对象具备的属性和行为。例如,现在面临一名足球运动员想要将球射进对方球门这个实际问题,试着以面向对象的思想来解决这一实际问题。步骤如下:
首先可以从这一问题中抽象出对象,这里抽象出的对象为一名足球运动员。
然后识别这个对象的属性。对象具备的属性都是静态属性,如足球运动员有一个鼻子、两条腿等,这些属性如图10.1所示。
图10.1 识别对象的属性
接着识别这个对象的动态行为,即足球运动员的动作,如跳跃、转身等,这些行为都是这个对象基于其属性而具有的动作,这些行为如图10.2所示。
图10.2 识别对象具有的行为
识别出这个对象的属性和行为后,这个对象就被定义完成了,然后根据足球运动员具有的特性制定要射进对方球门的具体方案以解决问题。
究其本质,所有的足球运动员都具有以上的属性和行为,可以将这些属性和行为封装起来以描述足球运动员这类人。由此可见,类实质上就是封装对象属性和行为的载体,而对象则是类抽象出来的一个实例。这也是进行面向对象程序设计的核心思想,即把具体事物的共同特征抽象成实体概念,有了这些抽象出来的实体概念,就可以在编程语言的支持下创建类。因此,类是那些实体的一种模型,具体如图10.3所示。
图10.3 现实世界与编程语言的对应关系
在图10.3中,通过面向对象程序设计的思想可以建立现实世界中具体事物、实体概念与编程语言中类、对象之间的一一对应关系
类的定义
Python使用class关键字来定义类,其语法格式如下:
class 类名:
类体
其中,类名的首字母一般需要大写,具体示例如下:
class Student:
def say(self, name): # 实例方法
self.name = name # 实例属性
print('我是', self.name)
其中,实例方法与前面学习的函数格式类似,区别在于类的所有实例方法都必须至少有一个名为self的参数,并且必须是方法的第一个形参(如果有多个形参),self参数代表将来要创建的对象本身。另外,self.name称为实例属性,在类的实例方法中访问实例属性时需要以self为前缀。
在类中定义实例方法时,第一个参数指定为“self”只是一个习惯。实际上,该参数的名字是可以变化的,具体如下所示:
class Student:
def say(my, name): # 实例方法
my.name = name # 实例属性
print('我是', my.name)
尽管如此,本书建议大家编写代码时仍以self作为实例方法的第一个参数名字,这样便于他人阅读代码。
对象的创建
在Python中,有两种对象:类对象与实例对象。类对象只有一个,而实例对象可以有多个。
· 类对象
类对象是在执行class语句时创建的。
在定义类时,还可以定义类属性。
· 实例对象
实例对象通过调用类对象来创建(就像调用函数一样来调用类对象),每个实例对象继承类对象的属性,并获得自己的命名空间。实例方法的第一个参数默认为self,表示引用实例对象。
如果类中存在相同名称的类属性与实例属性,则通过实例对象只能访问实例属性。
此外,还可以通过赋值运算符修改或增加类对象与实例对象的属性。
构造方法
Python中构造方法一般用来为实例属