Python程序设计项目化教程(AI助学)(微课版)(第2版)- 课件 任务6 学生类的设计与实现_第1页
Python程序设计项目化教程(AI助学)(微课版)(第2版)- 课件 任务6 学生类的设计与实现_第2页
Python程序设计项目化教程(AI助学)(微课版)(第2版)- 课件 任务6 学生类的设计与实现_第3页
Python程序设计项目化教程(AI助学)(微课版)(第2版)- 课件 任务6 学生类的设计与实现_第4页
Python程序设计项目化教程(AI助学)(微课版)(第2版)- 课件 任务6 学生类的设计与实现_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

任务6:学生类的设计与实现Python程序设计1、任务描述目录2、技术准备Python程序设计3、任务实施1、任务描述本任务采用面向对象程序设计方法来实现学生信息管理子模块的主要功能:学生信息的添加、删除、修改和显示。完成本任务需要了解和掌握面向对象程序设计方法,掌握Python中类的使用。2.1类的定义和实例化技术准备2.2数据成员与方法成员Python程序设计2.3访问权限2.4属性2.5继承2.6多态2.7特殊方法和运算符重载2.1类的定义与实例化面向对象程序设计的思想主要是针对大型软件设计而提出,使得软件设计更加灵活,能够很好地支持代码复用和设计复用,代码具有更好的可读性和可扩展性,大幅度降低了软件开发的难度。面向对象程序设计中,程序的基本单元是类。类是对具有相同属性和行为的一组实例的抽象,一个类包含数据(描述类的属性)和方法(对数据的操作)两部分。例如,每个学生都有学号、姓名、成绩等属性,都有对这些属性的操作(例如设置学生信息、读取学生信息等)。因此,可以将描述学生属性的数据(学号、姓名、成绩)和对数据进行操作的函数(设置学生信息、读取学生信息)封装在一起,形成一个学生类,每个学生都是学生类的一个实例。在面向对象程序设计中,每个实例被称为一个对象,对数据的操作函数被称为方法。2.1类的定义与实例化类与对象的关系就如数据类型和数据之间的关系:类是对象的抽象;而对象则是类的具体实例。Python完全采用了面向对象程序设计的思想,是真正面向对象的高级动态编程语言,完全支持面向对象的基本功能,如封装、继承、多态以及对基类方法的覆盖或重写等。创建类时用变量形式表示的对象属性称为数据成员,用函数形式表示的对象行为称为方法成员,数据成员和方法成员统称为类的成员。2.1类的定义与实例化1、类的定义class类名:

数据成员名=值def方法名():

方法体(1)类名命名规则遵循标识符命名规则,通常情况下建议类名首字母大写。(2)类成员包括数据成员和方法成员,不论是哪种成员,可以是0个或多个,根据需要来定义。数据成员的定义通过直接给一个数据成员赋值的方式进行,方法成员的定义与定义函数的格式相同。classStudent2:school='Tsinghua'#数据成员defout(self):#方法成员print('Iamastudent')print('Myschoolis',Student2.school)classStudent1:defout(self):#方法成员print('Iamastudent')2.1类的定义与实例化2、类的实例化格式:对象名=类名([参数表])参数表是可选的,根据类的构造函数是否需要参数来确定。>>>s2=Student2()#创建Student2类对象>>>s2.out()#调用方法成员IamastudentMyschoolisTsinghua>>>s2.school#访问数据成员'Tsinghua'classStudent2:school='Tsinghua'#数据成员defout(self):#方法成员print('Iamastudent')print('Myschoolis',Student2.school)Python中可以使用内置函数isinstance()来测试一个对象是否为某个类的实例。>>>isinstance(s2,Student2)True2.2数据成员与方法成员1、数据成员Python中的数据成员有两类:类成员与实例成员。类成员是属于类的数据成员,实例成员是属于每个实例对象的数据成员。类成员是在类内的方法成员之外定义的。实例成员是在类内的方法成员中定义的,一般是在构造函数__init__()中定义的,类内定义和使用时必须以self作为前缀。2.2数据成员与方法成员classStudent:school='Tsinghua'#类数据成员

def__init__(self,name):=name#实例成员

defout(self):print('name:',)print('school:',Student.school)实例成员与类成员的应用区别:实例成员属于实例对象,用于描述对象的属性,同一个类的不同对象之间相互独立,修改一个对象的实例成员不会影响到其他对象的相应实例成员,类外通过“对象名.实例成员”形式访问;类数据成员不属于任何一个对象,而是为该类所有对象共享的,因此也称为类变量,类内通过“类名.类成员”形式访问,类外可通过“类名.类成员”或“对象名.类成员”形式访问,但如果要修改类成员则只能通过“类名.类成员”形式。2.2数据成员与方法成员>>>s1=Student('李军')>>>s2=Student('赵宇')>>>#类外通过“对象名.实例成员”方式访问实例成员'李军'>>>'赵宇'>>>s1.school#类外可通过“对象名.类成员”方式访问类数据成员'Tsinghua'>>>s2.school'Tsinghua'>>>='李小军'#修改实例成员>>>'李小军'>>>#另一个对象中的实例成员没有受影响'赵宇'2.2数据成员与方法成员在Python中比较特殊的是,可以动态地为类和对象增加成员,这一点是和很多面向对象程序设计语言所不同的,也是Python动态特点的一种重要体现。>>>Student.count=0#为Student类动态添加一类数据成员count>>>s1.count0>>>s2.count02.2数据成员与方法成员当在类外用“对象名.类成员”形式修改类数据成员时,此时修改的并不是类成员。>>>s1.count=10#通过“对象名.类成员”形式修改类数据成员>>>s2.count0#类成员值并没有改变>>>Student.count0在Python中,如果为某个对象数据成员赋值,如果该对象中存在此数据成员,这时就修改对象数据成员的值,如果该对象中不存在此数据成员,那么就会自动为该对象添加一个这样的数据成员。2.2数据成员与方法成员要修改类数据成员的值只能通过类去修改,而不能通过对象去修改。>>>Student.count=20#通过“类名.类数据成员”形式修改类数据成员>>>Student.count20>>>s2.count20>>>s1.count#s1对象访问的是其自身的数据成员count102.2数据成员与方法成员2、方法成员(1)实例方法实例方法是为每个对象所有、各自独立的方法。类中定义的方法如果没有特殊声明的都是实例方法。类的所有实例方法都必须至少有一个名为self的参数,并且必须是方法的第一个形参,self参数代表将来要创建的对象本身,在外部通过“对象名.方法名()”调用实例方法时并不需要传递这个参数;如果在外部通过“类名.方法名()”调用实例方法则需要显式为self参数传值。在类的实例方法中访问实例成员时以“self.实例成员”形式,访问类成员时以“类名.类成员”形式。2.2数据成员与方法成员classStudent:school='Tsinghua'def__init__(self,name):#实例方法=name

defout(self):#实例方法print('name:',)print('school:',Student.school)>>>s=Student('张明')>>>s.out()#通过对象名调用实例方法name:张明school:Tsinghua>>>Student.out(s)#通过类调用实例方法name:张明school:TsinghuaPython中,在类中定义实例成员方法时将第一个参数定义为“self”只是一个习惯,而实际上类的成员方法中第一个参数的名字是可以是任意合法的标识符即可,不是必须使用“self”这个名字。尽管如此,建议编写代码时仍以self作为方法的第一个参数名字。这个self有点类似其他面向对象编程语言(如java)中的this。2.2数据成员与方法成员将实例方法中的第一个参数self改为其他名字(如this),也是可以的:classStudent:school='Tsinghua'def__init__(this,name):=name

defout(this):print('name:',)print('school:',Student.school)>>>s1=Student('张明')>>>s1.out()name:张明school:Tsinghua>>>'张明'2.2数据成员与方法成员构造方法与析构方法构造方法__init__()是创建对象时由系统自动调用的方法,如果没有显示定义该方法,系统会调用缺省构造方法。该方法通常用于初始化对象,如为数据成员设置初始值或进行其他必要的初始化工作。析构方法__del__()是对象所有的引用被清除后由系统自动调用的方法。一般用来释放对象所占用的资源。同样如果没有此方法,系统会提供一个默认的析构方法进行必要的清理工作。classStudent:school='Tsinghua'def__init__(self,name):=nameprint('对象初始化...')

defout(self):print('name:',)print('school:',Student.school)

def__del__(self):print('对象销毁...')>>>s1=Student('张明')对象初始化...>>>dels1对象销毁...2.2数据成员与方法成员(2)类方法类方法是属于类的方法,不属于任何实例对象。类方法以cls作为第一个参数表示该类自身,在调用类方法时也不需要为该参数传递值(与实例方法中的self类似)。类中定义类方法时用@classmethod修饰。类方法既可以用“类名.方法名()”形式访问,也可以用“对象名.方法名()”名形式访问。类方法中只能访问类成员,而不能访问实例成员;实例方法中类成员和实例成员都可以访问。2.2数据成员与方法成员classStudent:school='Tsinghua'def__init__(self,name):#实例方法=name

defout(self):#实例方法print('name:',)print('school:',Student.school)

@classmethod#类方法defoutSchool(cls):print('类方法中:school:',Student.school)>>>s=Student('张明')>>>s.outSchool()#通过对象名调用类方法类方法中:school:Tsinghua>>>Student.outSchool()#通过类名调用类方法类方法中:school:Tsinghua说明:类方法的第一个参数cls也可以用其他合法标识符表示,与实例方法中的第一个参数self类似,但一般不建议使用其他标识符。2.2数据成员与方法成员(3)静态方法静态方法也是属于类的方法,不属于任何实例对象,这一点与类方法相似。类中定义静态方法用@staticmethod修饰。类方法要求至少有一个参数cls用于表示类自身,而静态方法则没有此要求,也即静态方法可以没有任何参数。静态方法同样既可以用“类名.方法名()”形式访问,也可以用“对象名.方法名()”形式访问。与类方法相同,静态方法中也只能访问类成员,而不能访问实例成员。2.2数据成员与方法成员classStudent:school='Tsinghua'def__init__(self,name):=name

defout(self):print('name:',)print('school:',Student.school)

@classmethoddefoutSchool(cls):print('类方法中:school:',Student.school)

@staticmethod#静态方法defstatic_out():print('静态方法中:school:',Student.school)>>>s=Student('张明')>>>s.static_out()#使用对象调用静态方法静态方法中:school:Tsinghua>>>Student.static_out()#使用类调用静态方法静态方法中:school:Tsinghua2.3访问权限1、访问权限的种类Python对数据成员和方法成员的访问权限有三种:公有的、受保护的和私有的。(1)公有的:公有的类成员可以在任何地方被访问。(2)受保护的:受保护的类成员则可以被其自身以及其子类所访问。(3)私有的:私有的类成员则只能被其定义所在的类访问。2、成员名的含义在Python中不同的访问权限是通过成员名来体现的。以下画线开头或结束的成员有特殊的含义。(1)公有成员:两侧不带下画线的,形如:xxx。(2)受保护成员:以单下画线开头,形如:_xxx。(3)私有成员:以双下画线开头,形如:__xxx。(4)特殊成员:两侧各有双下画线,形如:__xxx__,为系统定义的特殊成员,如构造方法__init__()、析构方法__del__()等。2.3访问权限classStudent:school='Tsinghua'#公有类成员__fee=4800#私有类成员def__init__(self,name,pw):#构造方法=name#公有实例成员self.__pw=pw#私有实例成员

defout(self):#公有方法成员print('name:',)print('pw:',self.__pw)print('school:',Student.school)print('fee:',Student.__fee)>>>s=Student('王芳','123')>>>s.out()#调用公有方法name:王芳pw:123school:Tsinghuafee:4800>>>#访问公有数据成员'王芳'>>>='王小芳'#修改公有数据成员的值>>>'王小芳'>>>s.pw#类外不能访问私有数据成员Traceback(mostrecentcalllast):File"<pyshell#58>",line1,in<module>s.pwAttributeError:'Student'objecthasnoattribute'pw'2.3访问权限classStudent:school='Tsinghua'#公有类成员__fee=4800#私有类成员def__init__(self,name,pw):#构造方法

=name#公有实例成员self.__pw=pw#私有实例成员

defout(self):#公有方法成员print('name:',)print('pw:',self.__pw)print('school:',Student.school)print('fee:',Student.__fee)实际上,在Python中,并没有严格意义上的私有成员,因私有成员在对象外部可以通过“对象名._类名__xxx”这样的特殊方式访问。>>>s._Student__pw#访问私有成员'123'>>>s._Student__pw='123456'#修改私有成员

>>>s.out()name:王小芳pw:123456school:Tsinghuafee:48002.4属性公有数据成员可在类外部随意访问和修改,但很难控制用户修改数据时的合法性;私有数据成员可对数据进行合法性检查,但须对外提供相应的公有方法来对其访问和修改。属性结合了公有数据成员和私有数据成员的优点,既可以像私有成员那样对值进行必要的检查,又可以像公有成员一样灵活地访问。属性的设置有两种方法,一是利用修饰器@property。二是利用property()函数。可根据需要设置属性的可读、可写和可删除操作。2.4属性1、利用修饰器@property设置属性【例6‑10】设置属性的可读、可写、可删除。classTest:def__init__(self,value):self.__value=value

@propertydefvalue(self):returnself.__value

@value.setterdefvalue(self,v):self.__value=v

@value.deleterdefvalue(self):delself.__value>>>t=Test(3)>>>t.value#读取属性值3>>>t.value=4#修改属性值>>>t.value4>>>delt.value#删除属性>>>t.value#属性已经被删除,再访问就抛出异常Traceback(mostrecentcalllast):File"<pyshell#5>",line1,in<module>t.valueFile"D:\workspace\python\chap\ch606.py",line7,invaluereturnself.__valueAttributeError:'Test'objecthasnoattribute'_Test__value'2.4属性【例6‑11】设置属性的可读、可写操作。classTest:def__init__(self,value):self.__value=value

@propertydefvalue(self):returnself.__value

@value.setterdefvalue(self,v):self.__value=v>>>t=Test(3)>>>t.value3>>>t.value=4>>>delt.value#没有设置属性可删除,因此在删除时抛出异常Traceback(mostrecentcalllast):File"<pyshell#9>",line1,in<module>delt.valueAttributeError:can'tdeleteattribute2.4属性【例6‑12】检查属性值的有效性。classTest:def__init__(self,value):self.__value=value

@propertydefvalue(self):returnself.__value

@value.setterdefvalue(self,v):if0<=v<=100:self.__value=velse:print('error')>>>t=Test(3)>>>t.value3>>>t.value=9#值在合法范围内>>>t.value9>>>t.value=999#值超出合法范围error2.4属性2、利用property()函数设置属性【例6‑13】利用property()函数设置属性的可读、可写、可删除。classTest:def__init__(self,value):self.__value=value

def__get(self):returnself.__value

def__set(self,v):self.__value=v

def__del(self):delself.__value

value=property(__get,__set,__del)>>>t=Test(3)>>>t.value#读取属性值3>>>t.value=4#修改属性值>>>t.value4>>>delt.value#删除属性>>>t.value#属性已经被删除,再访问就抛出异常Traceback(mostrecentcalllast):File"<pyshell#5>",line1,in<module>t.valueFile"D:\workspace\python\chap\ch606.py",line7,invaluereturnself.__valueAttributeError:'Test'objecthasnoattribute'_Test__value'2.4属性【例6‑14】设置属性的可读可写操作,同时要求数据的合法取值范围是0-100。classTest:def__init__(self,value):self.__value=value

def__get(self):returnself.__value

def__set(self,v):if0<=v<=100:self.__value=velse:print('error')

value=property(__get,__set)>>>t=Test(4)>>>t.value4>>>t.value=9>>>t.value9>>>t.value=999error>>>delt.valueTraceback(mostrecentcalllast):File"<pyshell#27>",line1,in<module>delt.valueAttributeError:can'tdeleteattribute2.5继承继承实际上是面向对象程序设计中的两个类之间的一种关系。当一个类A能够获取另一个类B中所有非私有成员作为自己的部分或全部成员时,就称这两个类之间有继承关系。继承是为代码复用和设计复用而设计的,是面向对象程序设计的重要特性之一。这种利用现有类派生出新类的过程就称为继承。新类既拥有原有类的特性,又增加了自身新的特性。设计一个新类时,如果可以继承一个已有的设计良好的类然后进行二次开发,无疑会大幅度减少开发工作量。在继承关系中,已有的、设计好的类称为父类或基类,新设计的类称为子类或派生类。继承分为单继承和多继承,单继承是指任何一个子类只能有一个父类,而多继承是指一个子类可以有若干个父类。Python支持多继承。2.5继承1、继承定义格式Python中继承的实现是在定义子类时在子类名后面加上括号,括号里面为要继承的父类名。具体格式如下所示:class子类名(父类名1[,父类名2…]):

子类成员定义2.5继承classStudent:#定义父类school='Tsinghua'

def__init__(self,name):self.__name=name

defout(self):print('name:',self.__name)print('school:',Student.school)

classMiddleStudent(Student):#定义子类pass>>>s=Student('刘军')#实例化一个父类对象>>>s.out()name:刘军school:Tsinghua>>>ms=MiddleStudent('刘明')#实例化一个子类对象>>>ms.out()name:刘明school:Tsinghua2.5继承2、父类方法的调用子类除了可以继承父类成员外,还可以添加自己的一些成员。如果需要在子类中调用父类的方法,可以使用“super().方法名()”或者“父类名.方法名()”的方式来实现。2.5继承classStudent:#父类school='Tsinghua'def__init__(self,name):self.__name=name

defout(self):print('name:',self.__name)print('school:',Student.school)

classMiddleStudent(Student):#子类def__init__(self,name,grade):Student.__init__(self,name)#调用父类方法,也可用super().__init__(name)self.__grade=grade

defout(self):Student.out(self)#调用父类方法,也可用super().out()print('grade:',self.__grade)>>>s=Student('王小芳')#实例化一个父类对象>>>s.out()name:王小芳school:Tsinghua>>>ms=MiddleStudent('李明',6)#实例化一个子类对象>>>ms.out()name:李明school:Tsinghuagrade:62.5继承3、多继承Python支持多继承,如果父类中有相同的方法名,而在子类中使用时没有指定父类名,则Python解释器将从左向右按顺序进行搜索。classStudent:defout(self):print('我是学生')

classPerson:defout(self):print('我是中国人')

classMiddleStudent(Person,Student):#继承自两个父类pass>>>ms=MiddleStudent()>>>ms.out()#调用的是Person父类中的方法我是中国人2.5继承由上述结果可以看出,MiddleStudent类的两个父类Person和Student都有out()方法,在调用时没有指定父类名,则自动调用第一个父类(也即Person类)中的out()方法。如果将子类MiddleStudent的两个父类交换下顺序,则将会调用第一个父类Student中的out()方法:classMiddleStudent(Student,Person):#继承自两个父类pass

>>>ms=MiddleStudent()>>>ms.out()#调用的是Student父类中的方法我是学生2.6多态多态是指父类的同一个方法在不同子类对象中具有不同的表现或行为。子类继承了父类的成员后,可以重写父类成员方法,使其满足自己的需求,这就是多态的表现形式。在Python中主要是通过重写父类方法来实现多态。classStudent:#父类defout(self):print('我是学生')

classMiddleStudent(Student):#子类defout(self):print('我是中学生')

classPrimaryStudent(Student):#子类defout(self):print('我是小学生')>>>s=Student()#实例化一个父类对象>>>s.out()我是学生>>>ms=MiddleStudent()#实例化一个子类对象>>>ms.out()我是中学生>>>ps=PrimaryStudent()#实例化一个子类对象>>>ps.out()我是小学生2.7特殊方法与运算符重载1、特殊方法在Python中,用户可以在自定义类里通过实现特殊方法来重载内建运算符。类可以重载所有的表达式运算符,以及打印、函数调用等内置运算。Python类中提供了大量的特殊方法,用以实现对应运算符的重载。这些特殊方法都是以双下画线开始和结束,如前面提到的构造函数和析构函数。每个特殊方法都有不同的功能。自定义类想实现某些操作只须重写某个特殊方法即可。例如,需要自定义类能支持运算符“+”操作,只需重写相对应的__add__()方法即可。2.7特殊方法与运算符重载常用特殊方法:方法功能说明__new__()类的静态方法,用于确定是否要创建对象__init__()构造方法,创建对象时自动调用__del__()析构方法,释放对象时自动调用__add__()+__sub__()-__mul__()*__truediv__()/__floordiv__()//__mod__()%__pow__()**__eq__()、__ne__()、__lt__()、__le__()、__gt__()、__ge__()==、!=、<、<=、>、>=__lshift__()、__rshift__()<<、>>__round__()对内置函数round()对应__str__()与内置函数str()对应,要求该方法必须返回str类型的数据__repr__()打印、转换,要求该方法必须返回str类型的数据2.7特殊方法与运算符重载2、运算符重载假设定义了如下一个向量类:classVector:def__init__(self,a,b):self.__a=aself.__b=b

defout(self):print('Vector({},{})'.format(self.__a,self.__b))>>>v1=Vector(4,5)>>>v2=Vector(8,9)>>>v1+v2Traceback(mostrecentcalllast):File"<pyshell#11>",line1,in<module>v1+v2TypeError:unsupportedoperandtype(s)for+:'Vector'and'Vector'上述代码抛出异常的原因就是自定义类默认都是不支持常用运算符的,要想让其能支持某种运算符,需要重写相对应的特殊方法。2.7特殊方法与运算符重载【例6‑19】定义一个向量类Vector,包含2个数据成员,实现两个向量相加运算。classVector:def__init__(self,a,b):self.__a=aself.__b=b

defout(self):print('Vector({},{})'.format(self.__a,self.__b))

def__add__(self,other):#重载运算符“+”returnVector(self.__a+other.__a,self.__b+other.__b)>>>v1=Vector(3,4)>>>v2=Vector(4,8)>>>v=v1+v2#两个向量相加>>>v.out()Vector(7,12)上述代码在定义类时重写了__add__()方法,因此就可以支持运算符“+”操作。因此要想让这个向量类能够支持“+”、“-”、“*”、“/”之类的操作,只需要在类中重写相应的__add__()、__sub__()、__mul__()、__truediv__()方法即可。2.7特殊方法与运算符重载3、定制对象的输出内容在交互模式下直接显示对象或用print()输出对象时,系统会调用相应的__str__()和__repr__()方法。如果自定义类没有重载这两个方法,系统会提供默认方法。>>>v1<__main__.Vectorobjectat0x000000E092DCB9B0>>>>print(v1)<__main__.Vectorobjectat0x000000E092DCB9B0>这样的输出结果并不直观,要想重新定制对象的输出内容,可通过重载相应的特殊方法__repr__()和__str__()来实现。重载时可选择重载其中的一个,也可两个都重载。如果只重载__str__()方法,则只有print()和str()函数可调用这个方法进行转换。如果只重载__repr__()方法,可以保证各种操作下都能正确获得对象自定义的字符串形式。如果同时重载了__str__()和__repr__()方法,则print()和str()函数调用的是__str__()方法,交互模式下直接显示和repr()函数调用的是__repr__()方法。2.7特殊方法与运算符重载【例6‑20】定制对象的输出字符串内容classVector:def__init__(self,a,b):self.__a=aself.__b=b

defout(self):print('Vector({},{})'.format(self.__a,self.__b))

def__add__(self,other):returnVector(self.__a+other.__a,self.__b+other.__b)

def__repr__(self):return'ThisisaVector'

def__str__(self):return'Vector'>>>v1=Vector(3,4)>>>v1#调用的是__repr__()方法thisisaVector>>>repr(v1)#调用的是__repr__()方法'thisisaVector'>>>print(v1)#调用的是__str__()方法Vector>>>str(v1)#调用的是__str__()方法'Vector'2.7特殊方法与运算符重载如果希望不论是直接显示对象还是用print()输出对象时,其输出内容都是相同的,只需要让两个方法都返回相同内容即可。或者是只定义其中一个方法,然后利用赋值方式把其赋给另一个方法。【例6‑21】定制对象的字符串内容,使其输出内容都相同。classVector:def__init__(self,a,b):self.__a=aself.__b=b

defout(self):print('Vector({},{})'.format(self.__a,self.__b))

def__add__(self,other):returnVector(self.__a+other.__a,self.__b+other.__b)

def__repr__(self):return'ThisisaVector'

__str__=__repr__#把一个方法赋值给另一个方法>>>v=Vector(3,4)>>>vthisisaVector>>>print(v)thisisaVector3.1学生类的设计与实现任务实施3.2学生管理类的设计与实现Python程序设计3.3系统测试3.1

学生类的设计与实现学生信息管理模块中每个学生的基本信息有学号、姓名、语文成绩、数学成绩和英语成绩,设计一个学生类,包含学号、姓名、语文成绩、数学成绩和英语成绩等数据成员,然后添加一个构造方法,用于实例化时可直接传入相应的参数来创建学生对象,代码如下:classStudent:def__init__(self,no,name,chinese,math,english):self.no=no=nameself.chinese=int(chinese)self.math=int(math)self.english=int(english)3.2

学生管理类的设计与实现设计一个学生信息管理类StudentList用于实现对所有学生信息的管理,如学生信息的添加、删除、修改和显示等功能。classStudentList:def__init__(self):self.stulist=[]

defshow(self):#显示学生信息print('{:8}\t{:8}\t{:8}\t{:8}\t{:8}'.format('学号','姓名','语文','数学','英语'))forstuinself.stulist:print('{:8}\t{:8}\t{:<8}\t{:<8}\t{:<8}'.format(stu.no,,stu.chinese,stu.math,stu.english))3.2

学生管理类的设计与实现definsert(self):#添加学生信息whileTrue:no=input('学号:')name=input('姓名:')chinese=input('语文成绩:')math=input('数学成绩:')english=input('英语成绩:')stu=Student

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论