【问题描述】
请开发一个班委信息类,再创建一个班委对象。班委信息包含学号、姓名、性别、班级、职务。方法主要有设置职务、显示学生信息。
输出结果:
职务设置成功!
0001 李磊 男 2021级计算机1班 班长
【题前思考】
根据问题描述,填写表6-2-1。
表6-2-1 问题分析
【解题思路】
比较学生信息类和班委信息类,它们有相同的属性:学号、姓名、性别、班级;相同的方法:显示学生信息。但是班委信息类多一个属性“职务”。
因此,班委信息类可以继承学生信息类的所有属性和方法。然后在班委信息类中增加属性“职务”,增加设置职务的方法,重写显示学生信息的方法。班委信息类的属性和方法如图6-2-1所示。
图6-2-1 班委信息类的属性和方法
【程序代码】
【代码分析】
①:导入模块a6_1_1学生信息类中的Student类。
②:以Student类为父类创建新的类ClassCommittee。格式:class类名(父类名):,括号里面的参数表示要继承的父类。
③:定义方法__init__( )初始化对象。super( ).__init__(sno,name,sex,clsname)语句中的super( )是个特殊的方法,通过它调用父类的__init__( )方法,对父类对象进行初始化,如图6-2-2所示。self.position=position初始化子类特有的属性“职务”。子类将会继承父类全部公有属性和方法,即能不需要定义而直接使用父类的所有公有属性和方法。如ClassCommittee类对象可以不经定义直接使用Student类的sno、name、sex、clsname属性和show( )方法。
图6-2-2 初始化父类对象
④:定义方法set_position( )设置职务。变量positions中存储的是职务信息,还需要检查传入的职务是否合法,合法就显示设置成功,并打印“职务设置成功!”;如果不合法,打印“没有该职务!”
⑤:重写父类中的show( )方法,增加显示职务。show( )方法中就直接使用了父类Student类的属性sno、name、sex、clsname。因为子类重写了父类的show( )方法,所以在子类中用show( )调用到的就是子类的show( )方法,如果要调用父类的show( )方法需要使用语句super( ).show( )。
⑥:stu=ClassCommittee('0001','李磊','男','2021级计算机1班')创建班委ClassComitte类对象stu。stu.set_position("班长")调用stu的方法设置职务为班长。调用stu的stu.show( )方法,显示学生信息。
【优化提升】
把类中的属性职务设置为私有属性self.__position=None。职务的访问和修改,可以通过在方法前增加修饰器来解决。代码如下: