内容正文:
任务7.1 对象与类
电影对象的定义和使用
7.1 对象与类——电影对象的定义和使用
【任务描述】
优秀的影片 可以鼓舞人心,带给人积极向上的心态。小T酷爱看电影,他从某影评网站收集了几部评价较高、他也较感兴趣的国产电影信息(包括电影名、导演、主演等字段)。他打算一周之内把这几部电影看完,并在看完之后对每部影片进行评分。要求输出已看电影的评分、已看电影部数、已评电影的均分,并释放已看过的电影资源。
7.1 对象与类——电影对象的定义和使用
【任务分析】
我们可以构建电影类来完成本任务,思路如下:
(1)定义电影类,在类中定义相应的变量、方法,实现存储电影信息,计算电影评分等功能。
(2)把每部电影作为对象进行创建,创建的电影就是本周需要看的电影。
(3)每看完一部,就对电影进行评分、计算均分、输出信息并释放资源。
7.1 对象与类——电影对象的定义和使用
什么是类?
怎么定义类和对象?
怎么定义和使用类的变量与方法?
7.1.1 类的定义和使用
7.1.2 数据成员的访问
7.1.3 成员方法的调用
7.1.4 任务实现——电影对象的定义和使用
7.1 对象与类——电影对象的定义和使用
7.1.1 类的定义和使用
7.1.1 类的定义和使用
什么是类?
类怎么定义?
类怎么使用?
在现实世界中,可将事物抽象成类进行识别,比如汽车、动物、房子等,这些是面向对象程序设计中类(class)的来源。我们可以把程序处理对象抽象成类,类有属性、事件和方法。类可以派生一个或多个子类,这些子类可以通过类的继承来获到父类的属性、方法。
类中具体的个体就是对象(object),也称为实例(instance),可以通过类的实例化来创建对象。
7.1.1 类的定义和使用
把学生看作一个类
把每个具体学生看作一个对象
1.类的定义
7.1.1 类的定义和使用
class 类名:
类变量
def __init__(self, 参数): #构造方法
成员变量初始化
def 成员方法():
......
Python用class关键字来定义类
类名:类名的首字母必须大写,其他的与一般标识符的命名规则一致。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
7.1.1 类的定义和使用
class 类名:
类变量
def __init__(self, 参数): # 构造方法
成员变量初始化
def 成员方法():
......
构造方法:构造方法也叫初始化方法,被命名为__init__,用于创建对象的初始化工作。
成员变量:类的属性在程序中的体现,属性是用于描述类的特征,比如人类有姓名、性别、出生日期等特征。
成员方法:用于描述类的行为。比如人类具有说话、阅读、运动等行为。
7.1.1 类的定义和使用
【例7-1】学生类的定义。
class Student():
stdCount=0 # 类变量,学生对象个数
def __init__(self,no,name,age): # 构造方法
self.no=no # 成员变量
self.name=name # 成员变量
self.age=age # 成员变量
self.score=0 # 设置了默认值的成员变量
def setScore(self,score): # 成员方法,设置本门课成绩
self.score=score
def getInfo(self): # 成员方法,打印学生信息
print("%s同学的学号是%s,年龄是%d。"%(self.name,self.no,self.age))
def __del__(self):
print("%s对象的资源已释放。"%self.name)
7.1.1 类的定义和使用
2.对象的创建
通过实例化对象完成具体功能。实例化对象,即为类创建一个具体的对象,以此来使用类的相关属性和方法。创建(实例化)对象的基本语法格式如下:
对象名 = 类名(参数)
7.1.1 类的定义和使用
【例7-2】学生对象的创建。
# 类定义见【例7-1】
student1=Student('190404101','韩梅梅',18)
print("%s同学的学号是%s,年龄是%d。"%(student1.name,student1._Student__no, student1.age))
7.1.1 类的定义和使用
韩梅梅同学的学号是190404101,年龄是18。
韩梅梅对象的资源已释放。
3.构造方法
def __init__(self):
构造方法__init__()是一种特殊的方法,主要用来进行一些初始化操作,故也称为初始化方法。
构造方法__init__()是Python的内置方法,init前后用双下画线开头和结尾,避免与其他成员方法名称冲突。构造方法用于在创建对象时进行对象的初始化工作。
7.1.1 类的定义和使用
【例7-3】不带参数类的构造方法。
7.1.1 类的定义和使用
韩梅梅同学的学号是190404101,年龄是18。
class Student(): def __init__(self): # 构造方法 self.no = '190404101' # 成员变量,学生学号 self.name = '韩梅梅' # 成员变量,学生名字 self.age = 18 # 成员变量,学生年龄 def getInfo(self): # 成员方法,打印学生信息 print("%s同学的学号是%s,年龄是%d。"%(self.name,self.no,self.age)) student1=Student()student1.getInfo()
class Student():
def __init__(self): #构造方法
self.no = '190404101' #成员变量,学生学号
self.name = '韩梅梅' #成员变量,学生名字
self.age = 18 #成员变量,学生年龄
def getInfo(self): #成员方法,打印学生信息
print("%s同学的学号是%s,年龄是%d。"%(self.name,self.no,self.age))
student1=Student()
student1.getInfo()
韩梅梅同学的学号是190404101,年龄是18。
【例7-3】不带参数类的构造方法。
class Student():
stdCount=0 #类变量,学生对象个数
def __init__(self,no,name,age): #构造方法
self.no = no #成员变量,学生学号
self.name = name #成员变量,学生名字
self.age = age #成员变量,学生年龄
Student.stdCount += 1
def getCount(self): #成员方法,设置本门课成绩
print("共创建了%d个学生对象。"%(Student.stdCount))
def getInfo(self): #成员方法,打印学生信息
print("%s同学的学号是%s,年龄是%d。"%(self.name,self.no,self.age))
student1=Student('190404101','韩梅梅',18)
student1.getCount()
student1.getInfo()
【例7-4】带参数类的构造方法。
韩梅梅同学的学号是190404101,年龄是18。
__init__是构造方法,它是Python的内置方法,init前后用双下划线开头和结尾
在创建新对象时,Python会自动运行__init__方法
__init__中定义形参,必须至少有一个名为self的参数,必须是方法的第一个形参
7.1.1 类的定义和使用
即学即答:
构造方法的作用是( )。
A.进行对象的初始化 B.就是一般成员方法,没什么作用
C.进行类的初始化 D.创建对象
7.1.1 类的定义和使用
4.析构方法
__del__是析构方法,它是Python的内置方法,del前后用双下划线开头和结尾。
当删除对象来释放对象占用的资源时候,Python会自动调用析构方法__del__()。
如果在对象被销毁前需要程序完成某些功能的,可以显式地在del方法中完成这些功能,对象显式调用析构方法来释放资源。
7.1.1 类的定义和使用
【例7-5】析构方法。
class Student():
def __init__(self,no,name,age): #构造方法
self.no=no # 成员变量
self.name=name # 成员变量
self.age=age # 成员变量
def __del__(self): # 析构方法
print("%s对象的资源已释放。"%self.name)
student1=Student('190404101','韩梅梅',19)
del student1 # 删除对象,触发析构方法
韩梅梅同学的学号是190404101,年龄是19。
韩梅梅对象的资源已释放。
7.1.1 类的定义和使用
7.1.1 类的定义和使用
边学边练:
用Python程序完成以下功能:
(1)定义一个猫类(Cat),类属性包括猫名称(name)、种类(kind)、年龄(age):
(2)创建cat1对象,用构造函数完成类初始化,并添加成员方法,打印出该猫的名称\种类\年龄,例如“叫喵喵的猫的是一只波斯猫,它2岁了。”
(3)用析构函数释放(1)中创建的对象。
$$