Python编程作业五:面向对象编程
Python编程作业五:面向对象编程
一、类的定义和方法
定义一个学生类(Student),包括学号(id)、姓名(name)、出生日期(birthday)和分数(score)4个属性,其中出生日期是私有属性,不能被外界直接访问。该类应具有返回学生学号、姓名、年龄和分数的方法(可以考虑定义一个__str__方法,当然也可以是其他名称的方法),还应该具有使用小于号(<)对两个学生的分数比较大小的方法,以及使用等于号(=)判断两个同学是否出生在同一天的方法(建议考虑定义__lt__和__eq__实现运算符重载)。请编写该类并对其进行测试,程序测试的结果如下图所示:
class Student:
def __init__(self, sno, name, birthday, score):
= sno
= name
self.__birthday = birthday # 私有属性
self.score = score
def __str__(self):
return '\n学号:' + + '\n姓名:' + + '\n生日:' + self.__birthday + '\n成绩:' + str(self.score)
def __lt__(self, other):
if self.score < other.score:
return True
else:
return False
def __eq__(self, other):
if self.__birthday == other.__birthday:
return True
else:
return False
stud1 = Student('1001', '李刚', '1999-06-19', 89)
print(stud1)
stud2 = Student('1002', '王强', '2001-0-5', 79)
print(stud2)
stud = Student('1002', '张勇', '2001-0-5', 9)
print(stud)
def compare_score(s1, s2):
if s1 < s2:
print(, '的成绩低于', , sep='')
else:
print(, '的成绩不低于', , sep='')
def compare_birthday(s1, s2):
if s1 == s2:
print(, '与', , '是同一天出生', sep='')
else:
print(, '与', , '不是同一天出生', sep='')
print()
compare_score(stud1, stud2)
compare_birthday(stud1, stud2)
compare_score(stud2, stud)
compare_birthday(stud2, stud)
这段代码定义了一个名为 "Student" 的类,表示学生对象。该类具有以下属性和方法:
属性:
- no:学号
- name:姓名
- __birthday:生日(私有属性)
- score:成绩
方法:
- __init__(self, sno, name, birthday, score):构造函数,用于初始化学生对象的属性。
- __str__(self):返回一个包含学生信息的字符串,包括学号、姓名、生日和成绩。
- __lt__(self, other):比较运算符重载方法,用于比较两个学生对象的成绩大小。
- __eq__(self, other):比较运算符重载方法,用于比较两个学生对象的生日是否相等。
然后,代码创建了三个学生对象(stud1、stud2和stud),并使用构造函数进行初始化。随后,调用print函数打印每个学生对象的信息。
接着,代码定义了两个函数:
- compare_score(s1, s2):比较两个学生对象的成绩,并输出结果。
- compare_birthday(s1, s2):比较两个学生对象的生日,并输出结果。
最后,调用这两个函数来比较学生对象之间的成绩和生日关系,然后输出相应的结果。
运行结果:
二、图书管理系统
在图书管理系统中,读者类(Reader)是一个父类,该类包括读者编号(rid)、姓名(name)、所在部门(dept)个公有的实例属性,以及读者人数(counts)1个私有的类属性。读者的编号(rid)要求能够根据的创建的读者数而自动编号。读者类应具有输出读者公开属性的__str__方法,还应具有创建和注销读者、以及返回读者人数的方法。 教师读者类(TeaReader)是读者类(Reader)的一个子类,它除了继承父类的公有属性外,还具有教师读者最大借阅数(max_borrow)和教师读者数(tums)2个公有的类属性。要求设置教师读者最大借阅数(max_borrow)的初值为20,而教师读者的编号(rid)均以字母t开头,并且会根据的创建的教师读者数而自动编号。 学生读者类(TeaReader)是读者类(Reader)的一个子类,它除了继承父类的公有属性外,还具有学生读者最大借阅数(max_borrow) 和学生读者数(sums)2个公有的类属性。要求设置学生读者最大借阅数(max_borrow)的初值为10,而学生读者的编号(rid)均以字母s开头,并且会根据的创建的学生读者数而自动编号。 请根据下图的运行结果设计满足上述要求的三个类。
class Reader:
__counts=0 #私有类变量
def __init__(self, name, dept):
Reader.__counts+=1
self.rid=str(Reader.__counts)
=name
self.dept=dept
print('你是第{}位读者'.format(Reader.__counts))
def __str__(self):
return "读者的信息---编号:"+self.rid+",姓名:"++",所在部门:"+self.dept
def logout(self):
if Reader.__counts>0:
Reader.__counts-=1
@classmethod
def reader_count(cls):
return cls.__counts
class TeaReader(Reader):
tum=0
max_borrow=20
def __init__(self,name,dept):
super().__init__(name,dept)
+=1
self.rid='t'+str()
print(self)
def __str__(self):
return super().__str__()
def logout(self):
super().logout()
if >0:
-=1
print("注销教师读者:"+self.rid)
@classmethod
def get_max_borrow(cls):
return _borrow
class StuReader(Reader):
sum=0
max_borrow=10
def __init__(self,name,dept):
super().__init__(name,dept)
StuReader.sum+=1
self.rid='s'+str(StuReader.sum)
print(self)
def __str__(self):
return super().__str__()
def logout(self):
super().logout()
if StuReader.sum>0:
StuReader.sum-=1
print("注销学生读者:"+self.rid)
@classmethod
def get_max_borrow(cls):
return _borrow
t1=TeaReader('张辉','中文')
t2=TeaReader("李想",'英语')
s1=StuReader('张三','机械')
s2=StuReader('赵六','海洋')
print("教师读者最大借阅数:{}".format(TeaReader.get_max_borrow()))
print("学生读者最大借阅数:{}".format(StuReader.get_max_borrow()))
print("当前读者总人数:{}".format(Reader.reader_count()))
s2.logout()
print("当前教师读者总人数:{}".format())
print("当前学生读者总人数:{}".format(StuReader.sum))
print("当前读者总人数:{}".format(Reader.reader_count()))
这段代码定义了三个类:Reader(读者)、TeaReader(教师读者)和 StuReader(学生读者)。通过这些类,可以管理不同类型的读者,并跟踪他们的数量以及最大借阅数。
在代码中,使用了类变量、实例变量、类方法和实例方法来实现不同功能。主要有以下几点:
- Reader 类包含一个私有类变量 __counts 用于统计读者的数量,通过 __init__ 方法初始化读者的信息,并提供 logout 方法注销读者,以及 reader_count 类方法获取读者总人数。
- TeaReader 和 StuReader 类继承自 Reader 类,分别表示教师读者和学生读者,重写了部分方法以适应特定需求,比如修改读者编号规则、增加最大借阅数等。
- 在主程序中创建了几个教师读者和学生读者对象,演示了不同方法的调用和读者信息的管理。
运行结果:
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
推荐阅读
留言与评论(共有 8 条评论) |
本站网友 dota改键工具 | 27分钟前 发表 |
__eq__(self | |
本站网友 莱特币挖矿软件 | 27分钟前 发表 |
sno | |
本站网友 火罐减肥 | 16分钟前 发表 |
__str__(self):返回一个包含学生信息的字符串 | |
本站网友 燕顺 | 6分钟前 发表 |
'1999-06-19' | |
本站网友 英文网站 | 15分钟前 发表 |
'1999-06-19' | |
本站网友 秦皇岛港务局 | 30分钟前 发表 |
' + self.__birthday + '\n成绩 | |
本站网友 电脑辐射 | 0秒前 发表 |
姓名 |