Python编程作业五:面向对象编程

news2025/1/21 8:45:43

目录

一、类的定义和方法

二、图书管理系统


一、类的定义和方法

        定义一个学生类(Student),包括学号(id)、姓名(name)、出生日期(birthday)和分数(score)4个属性,其中出生日期是私有属性,不能被外界直接访问。该类应具有返回学生学号、姓名、年龄和分数的方法(可以考虑定义一个__str__方法,当然也可以是其他名称的方法),还应该具有使用小于号(<)对两个学生的分数比较大小的方法,以及使用等于号(=)判断两个同学是否出生在同一天的方法(建议考虑定义__lt__和__eq__实现运算符重载)。请编写该类并对其进行测试,程序测试的结果如下图所示:

class Student:
    def __init__(self, sno, name, birthday, score):
        self.no = sno
        self.name = name
        self.__birthday = birthday  # 私有属性
        self.score = score

    def __str__(self):
        return '\n学号:' + self.no + '\n姓名:' + self.name + '\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-03-5', 79)
print(stud2)
stud3 = Student('1002', '张勇', '2001-03-5', 93)
print(stud3)

def compare_score(s1, s2):
    if s1 < s2:
        print(s1.name, '的成绩低于', s2.name, sep='')
    else:
        print(s1.name, '的成绩不低于', s2.name, sep='')

def compare_birthday(s1, s2):
    if s1 == s2:
        print(s1.name, '与', s2.name, '是同一天出生', sep='')
    else:
        print(s1.name, '与', s2.name, '不是同一天出生', sep='')

print()
compare_score(stud1, stud2)
compare_birthday(stud1, stud2)
compare_score(stud2, stud3)
compare_birthday(stud2, stud3)

        这段代码定义了一个名为 "Student" 的类,表示学生对象。该类具有以下属性和方法:

属性:

  • no:学号
  • name:姓名
  • __birthday:生日(私有属性)
  • score:成绩

方法:

  • __init__(self, sno, name, birthday, score):构造函数,用于初始化学生对象的属性。
  • __str__(self):返回一个包含学生信息的字符串,包括学号、姓名、生日和成绩。
  • __lt__(self, other):比较运算符重载方法,用于比较两个学生对象的成绩大小。
  • __eq__(self, other):比较运算符重载方法,用于比较两个学生对象的生日是否相等。

        然后,代码创建了三个学生对象(stud1、stud2和stud3),并使用构造函数进行初始化。随后,调用print函数打印每个学生对象的信息。

        接着,代码定义了两个函数:

  • compare_score(s1, s2):比较两个学生对象的成绩,并输出结果。
  • compare_birthday(s1, s2):比较两个学生对象的生日,并输出结果。

        最后,调用这两个函数来比较学生对象之间的成绩和生日关系,然后输出相应的结果。

运行结果:

 

二、图书管理系统

        在图书管理系统中,读者类(Reader)是一个父类,该类包括读者编号(rid)、姓名(name)、所在部门(dept)3个公有的实例属性,以及读者人数(counts)1个私有的类属性。读者的编号(rid)要求能够根据的创建的读者数而自动编号。读者类应具有输出读者公开属性的__str__方法,还应具有创建和注销读者、以及返回读者人数的方法。

        教师读者类(TeaReader)是读者类(Reader)的一个子类,它除了继承父类的公有属性外,还具有教师读者最大借阅数(max_borrow)和教师读者数(tNums)2个公有的类属性。要求设置教师读者最大借阅数(max_borrow)的初值为20,而教师读者的编号(rid)均以字母t开头,并且会根据的创建的教师读者数而自动编号。

        学生读者类(TeaReader)是读者类(Reader)的一个子类,它除了继承父类的公有属性外,还具有学生读者最大借阅数(max_borrow) 和学生读者数(sNums)2个公有的类属性。要求设置学生读者最大借阅数(max_borrow)的初值为10,而学生读者的编号(rid)均以字母s开头,并且会根据的创建的学生读者数而自动编号。

        请根据下图的运行结果设计满足上述要求的三个类。

class Reader:
    __counts=0    #私有类变量
    def __init__(self, name, dept):
        Reader.__counts+=1
        self.rid=str(Reader.__counts)
        self.name=name
        self.dept=dept
        print('你是第{}位读者'.format(Reader.__counts))

    def __str__(self):
        return "读者的信息---编号:"+self.rid+",姓名:"+self.name+",所在部门:"+self.dept

    def logout(self):
        if Reader.__counts>0:
            Reader.__counts-=1

    @classmethod
    def reader_count(cls):
        return cls.__counts

class TeaReader(Reader):
    tNum=0
    max_borrow=20
    def __init__(self,name,dept):
        super().__init__(name,dept)
        TeaReader.tNum+=1
        self.rid='t'+str(TeaReader.tNum)
        print(self)

    def __str__(self):
        return super().__str__()

    def logout(self):
        super().logout()
        if TeaReader.tNum>0:
            TeaReader.tNum-=1
            print("注销教师读者:"+self.rid)

    @classmethod
    def get_max_borrow(cls):
        return cls.max_borrow

class StuReader(Reader):
    sNum=0
    max_borrow=10
    def __init__(self,name,dept):
        super().__init__(name,dept)
        StuReader.sNum+=1
        self.rid='s'+str(StuReader.sNum)
        print(self)

    def __str__(self):
        return super().__str__()

    def logout(self):
        super().logout()
        if StuReader.sNum>0:
            StuReader.sNum-=1
            print("注销学生读者:"+self.rid)

    @classmethod
    def get_max_borrow(cls):
        return cls.max_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(TeaReader.tNum))
print("当前学生读者总人数:{}".format(StuReader.sNum))
print("当前读者总人数:{}".format(Reader.reader_count()))

        这段代码定义了三个类:Reader(读者)、TeaReader(教师读者)和 StuReader(学生读者)。通过这些类,可以管理不同类型的读者,并跟踪他们的数量以及最大借阅数。

在代码中,使用了类变量、实例变量、类方法和实例方法来实现不同功能。主要有以下几点:

  • Reader 类包含一个私有类变量 __counts 用于统计读者的数量,通过 __init__ 方法初始化读者的信息,并提供 logout 方法注销读者,以及 reader_count 类方法获取读者总人数。
  • TeaReader 和 StuReader 类继承自 Reader 类,分别表示教师读者和学生读者,重写了部分方法以适应特定需求,比如修改读者编号规则、增加最大借阅数等。
  • 在主程序中创建了几个教师读者和学生读者对象,演示了不同方法的调用和读者信息的管理。

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1495827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文阅读】Elucidating the Design Space of Diffusion-Based Generative Models

Elucidating the Design Space of Diffusion-Based Generative Models 引用&#xff1a; Karras T, Aittala M, Aila T, et al. Elucidating the design space of diffusion-based generative models[J]. Advances in Neural Information Processing Systems, 2022, 35: 26565…

打破界限,释放创新:一键将HTML转化为PDF

在互联网时代&#xff0c;HTML作为网页的标准语言&#xff0c;承载着无数的信息与创意。然而&#xff0c;有时我们需要将这些在线内容转化为可打印、可分享的PDF格式。这时&#xff0c;一款高效、便捷的转换工具就显得尤为重要。 首先&#xff0c;我们要进入首助编辑高手主页面…

智能边缘计算网关实现工业自动化与数据处理的融合-天拓四方

随着物联网&#xff08;IoT&#xff09;技术的迅速发展和普及&#xff0c;越来越多的设备被连接到互联网上&#xff0c;产生了海量的数据。如何有效地处理和分析这些数据&#xff0c;同时确保数据的安全性和实时性&#xff0c;成为了摆在企业面前的一大挑战。智能边缘计算网关作…

文心一言 VS 讯飞星火 VS chatgpt (209)-- 算法导论15.4 6题

六、设计一个 O(nlgn) 时间的算法&#xff0c;求一个 n 个数的序列的最长单调递增子序列。&#xff08;提示&#xff1a;注意到&#xff0c;一个长度为 i 的候选子序列的尾元素至少不比一个长度为 i-1 候选子序列的尾元素小。因此&#xff0c;可以在输入序列中将候选子序列链接…

8、JavaWeb-案例-部门管理-员工管理

P135 案例-准备工作 依据案例&#xff0c;学习根据接口文档开发接口的能力。 完成部门管理和员工管理两部分。可以分析这两部分&#xff0c;一个部门可以有多个员工&#xff0c;一个员工归属一个部门。 准备数据库表&#xff0c;创建一个springboot工程&#xff0c;引入web开…

第五十一回 李逵打死殷天赐 柴进失陷高唐州-AI发展历程和常用框架

朱仝说只要杀了李逵就上梁山&#xff0c;柴进就劝李逵先在庄上住一段时间&#xff0c;先让朱仝、雷横和吴用回了梁山。 李逵在柴进庄上住了一个月&#xff0c;碰到柴进的叔叔柴皇城病重来信叫他去一趟&#xff0c;于是李逵就随着柴进去了高唐州。 柴皇城被殷天锡气死&#xf…

微服务day05-Gateway网关

Gateway网关 为了防止微服务能被任何身份的人访问&#xff0c;需要对访问微服务的人做身份认证和权限校验。网关的功能就是对访问用户进行身份认证和权限校验。网关具有3种功能&#xff1a; 身份验证和权限校验&#xff1a;网关作为微服务入口&#xff0c;需要校验用户是是否…

自学高效备考2024年AMC10:2000-2023年1250道AMC10真题解析

我们今天继续来随机看5道AMC10真题&#xff0c;以及详细解析&#xff0c;这些题目来自1250道完整的官方历年AMC10真题库。通过系统研究和吃透AMC10的历年真题&#xff0c;参加AMC10的竞赛就能拿到好名次。 即使不参加AMC10竞赛&#xff0c;初中和高中数学一定会学得比较轻松、…

Java线程状态解析:多线程编程指南

&#x1f31f; 欢迎来到 我的博客&#xff01; &#x1f308; &#x1f4a1; 探索未知, 分享知识 !&#x1f4ab; 本文目录 &#x1f31f;1. 引言&#x1f31f;2. Java线程的生命周期&#x1f4a1;2.1 <font color "skyblue">新建&#xff08;New&#xff09;&…

去除PDF论文行号的完美解决方案

去除PDF论文行号的完美解决方案 1. 遇到的问题 我想去除论文的行号&#xff0c;但是使用网上的Adobe Acrobat裁剪保存后 如何去掉pdf的行编号&#xff1f; - 知乎 (zhihu.com) 翻译时依然会出现行号&#xff0c;或者是转成word&#xff0c;这样就大大损失了格式&#xff0c…

Python之Web开发初学者教程—ubuntu下vi的使用

Python之Web开发初学者教程—ubuntu下vi的使用 vi\vim 文本编辑器 i 切换到输入模式&#xff0c;以输入字符。 x 删除当前光标所在处的字符。 : 切换到底线命令模式&#xff0c;以在最底一行输入命令。 vi 保存并退出&#xff1a;esc键退出编辑-…

人工智能在信息系统安全中的运用

一、 概述 对于企业和消费者来讲&#xff0c;人工智能是非常有用的工具&#xff0c;那又该如何使用人工智能技术来保护敏感信息?通过快速处理数据并预测分析&#xff0c;AI可以完成从自动化系统到保护信息的所有工作。尽管有些黑客利用技术手段来达到自己的目的&#xff0c;但…

JAVA语言类与对象的关系

在Java语言中&#xff0c;类与对象是面向对象编程的核心概念&#xff0c;它们之间存在着紧密的关系。以下是关于Java语言中类与对象的关系的要点&#xff1a; 1. 类&#xff08;Class&#xff09;&#xff1a; 类是Java程序的基本构造块&#xff0c;它是一种用户自定义的数据…

OpenHarmony教程指南—Navigation开发 页面切换场景范例

简介 在应用开发时&#xff0c;我们常常遇到&#xff0c;需要在应用内多页面跳转场景时中使用Navigation导航组件做统一的页面跳转管理&#xff0c;它提供了一系列属性方法来设置页面的标题栏、工具栏以及菜单栏的各种展示样式。除此之外还拥有动态加载&#xff0c;navPathSta…

【信息系统项目管理师】--【信息技术发展】--【新一代信息技术及应用】--【虚拟现实】

文章目录 第二章 信息技术发展2.2 新一代信息技术及应用2.2.6 虚拟现实1.技术基础2.关键技术3.应用和发展 第二章 信息技术发展 信息技术是在信息科学的基本原理和方法下&#xff0c;获取信息、处理信息、传输信息和使用信息的应用技术总称。从信息技术的发展过程来看&#xff…

Google Earth Engine(GEE)——CCNL:DMSP-OLS (1992-2013) 的校正的夜间灯光数据集(全球夜间灯光数据)

CCNL: Consistent And Corrected Nighttime Light Dataset from DMSP-OLS (1992-2013) 描述 一致和校正的夜间灯光 (CCNL) 数据集是国防气象计划 (DMSP) 操作线扫描系统 (OLS) 第 4版的重新处理版本。采用一系列方法减轻年际不一致性、饱和度和开花效应的影响&#xff0c;提高数…

js节点操作

js节点操作 一.DOM节点二.查找节点三.增加节点3.1.创建节点3.2.追加节点3.3.克隆节点 四. 删除节点 一.DOM节点 DOM树里每一个内容都称之为节点 节点类型&#xff1a;元素节点&#xff08;所有的标签 比如 body&#xff0c;div等&#xff0c;html 是根节点&#xff09; 属性节…

C++STL【list链表】

list 1. list介绍 list文档&#xff08;非官方&#xff09; 官方文档list是双向带头循环链表&#xff0c;它可以在常数范围内的任意位置进行插入和删除操作。list的迭代器是双向迭代器(bidirectional iterator)&#xff0c;它可以前后双向迭代。 由容器的底层结构决定&#xf…

redis 性能优化一

目录 前言 尾延迟 前言 说到redis 性能优化&#xff0c;优化的目的是什么&#xff1f;提高响应&#xff0c;减少延迟。就要关注两点&#xff0c;一是尾延迟&#xff0c;二是Redis 的基线性能。只有指标&#xff0c;我们的优化&#xff0c;才有意义&#xff0c;才能做监控以及…

数智驱动“坐商”变“行商”,安通控股迈向综合物流服务新高度

在全球经济增长放缓的大环境下&#xff0c;集装箱运输市场也面临供需双弱的新挑战。 国内内贸集装箱物流企业TOP3——安通控股股份有限公司&#xff08;以下简称“安通控股”&#xff09;激流勇进&#xff0c;积极推进营销理念从“业务操作型”向“客户营销型”转变、从传统的…