内容正文:
任务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.3 成员方法的调用
7.1.3 成员方法的调用
成员方法的类别有哪些?
各类成员方法如何定义?
如何调用?
1.成员方法的类别
类的成员方法按形式分为公有成员方法、私有成员方法。
私有方法以两个下划线“__”开始,在类内容通过类名或者self来调用(调用格式:类名.__私有成员方法名()或者self.__私有成员方法名())。
公有成员方法可以通过对象名直接调用。
7.1.3 成员方法的调用
按作用对象分,类的成员方法可分为普通成员方法、类方法和静态方法。
普通成员方法是对象所使用的方法,每个普通成员方法必须至少有一个名为self的参数,并且必须是方法的第一个形参成员。
类方法是类所拥有方法,需要用修饰“@classmethod”来标识,并且设置类方法的第一个参数为cls。类方法无法访问成员变量,但在类内可以通过cls访问类变量。
静态方法需要用修饰“@staticmethod”来标识,方法中没有self或者cls参数。静态方法通过类名访问类变量。
1.成员方法的类别
7.1.3 成员方法的调用
【例7-9】不同类别成员方法的类定义。
class Student():
stdCount=0 # 类变量,创建学生对象个数
def __init__(self,no,name,age): #构造方法
self.__no=no # 私有成员变量,学生学号
......
def setScore(self,score): # 普通成员方法,设置本门课成绩
self.score=score
def getInfo(self): # 普通成员方法,打印学生信息
print("%s同学的学号是%s,年龄是%d。"%(self.__name,self.__no,self.__age))
7.1.3 成员方法的调用
7.1.3 成员方法的调用
@classmethod
def classGetInfo(cls): # 类方法
print("类方法:创建了%d个对象。"%(cls.stdCount)) # 类内可通过cls访问类变量,无法访问成员变量
@staticmethod
def staticGetInfo(): # 静态方法
print("静态方法:创建了%d个对象。"%(Student.stdCount)) #类内通过类名访问类变量,无法访问成员变量
def __del__(self):
print("%s对象的资源已释放。"%self.__name)
【例7-9】不同类别成员方法的类定义。
即学即答:
类方法的第一个参数为( )。
A.self字 B.cls
C.static D.class
7.1.2 数据成员的访问
2.成员方法的调用
调用成员方法可使用类名或对象名与成员方法名用“.”连接即可。
普通成员方法通过对象名调用,类方法和静态方法在对象未创建时通过类名调用,对象创建后可通过类名或对象名调用。
私有数据成员在类的外部访问,则需通过对象名、类名共同作用下才可以访问。
类名. 类方法()
或 对象名. 类方法()
7.1.3 成员方法的调用
7.1.3 成员方法的调用
Student.classGetInfo() # 对象未创建,用类名调用类方法
Student.staticGetInfo() # 对象未创建,用类名调用静态方法
student1=Student('190404101','韩梅梅',18) # 创建对象
student1.getInfo() # 创建对象后,用对象名调用普通成员方法
student1.classGetInfo() # 创建对象后,可用类名或对象名调用类方法
student1.staticGetInfo() # 创建对象后,可用类名或对象名调静态方法
del student1
【例7-10】各类成员方法的调用。
类方法:创建了0个对象。
静态方法:创建了0个对象。
韩梅梅同学的学号是190404101,年龄是18。
类方法:创建了1个对象。
静态方法:创建了1个对象。
韩梅梅对象的资源已释放。
7.1.3 成员方法的调用
在7.1.1边学边练创建的类的基础上,实现以下操作:
(1)定义一个猫类(Cat),类属性包括猫名称(name)、种类(kind)、年龄(age):
(2)创建cat1对象,用构造函数完成类初始化,并添加成员方法printCat,打印出该猫的名称\种类\年龄,例如“叫喵喵的猫的是一只波斯猫,它2岁了。”
(1)创建一个类变量catCount,用来记录创建的对象数目,在构造函数中实现catCount值的计算,并打印出现有的对象数。
(2)定义析构函数,每释放一个对象资源,类变量catCount减少1,并打印出目前尚有的对象数目。
(3)创建3个以上的对象,并逐个删除对象。del 对象名
$$