您现在的位置是:首页 > 编程 > 

Python编程实验六:面向对象应用

2025-07-27 13:04:50
Python编程实验六:面向对象应用 一、实验目的与要求(1)通过本次实验,学生应掌握类的定义与对象的创建、类的继承与方法的覆盖; (2)理解类变量与实例变量的区别,能正确应用私有成员保护机制和运算符重载; ()综合应用所学知识实现对问题的编程求解; (4)按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果)二、实验内容请使用Python语言

Python编程实验六:面向对象应用

一、实验目的与要求

(1)通过本次实验,学生应掌握类的定义与对象的创建、类的继承与方法的覆盖; (2)理解类变量与实例变量的区别,能正确应用私有成员保护机制和运算符重载; ()综合应用所学知识实现对问题的编程求解; (4)按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果)

二、实验内容

请使用Python语言在Jupyter otebook环境下编程,完成下列题目的要求:

1、定义一个表示时间的类Time,要求它提供下面操作:

(1)Time(hours,minutes,seconds)创建一个时间对象 (2)t.hours()、t. minutes()和t. seconds()分别返回时间对象t的小时、分钟和秒钟值 ()使用运算符==和<判断两个时间对象的相等和小于关系 (4)使用运算符+和-为Time对象定义加法和减法操作,例如t1+t1表示基于当前时间t1向后延长一段t2时间,而t1-t2则表示基于当前时间t1向前提前一段t2时间。

提示:()和(4)要应用运算符重载

2、假设学校成员类(SchoolMember)具有成员的姓名(name)、年龄(age)、性别()属性。教师类(Teacher)继承了学校成员类,该类还记录了教师的职称(title)、工资(salary)、奖金(prize)等信息。学生类(Teacher)也继承了学校成员类,该类还记录了学生所属系部(dept)、成绩(score)等信息。请定义以上个类,要求同时满足如下功能:

(1)创建教师和学生对象时需要调用父类方法进行必要的初始化 (2)能反映学校成员总人数的增减变化,即每创建一个对象时,则总人数加1;而对象注销时,总人数减1 ()能够计算每位教师的总收入(工资+奖金),虽然不允许直接访问总收入,但可以通过提供相应的方法返回总收入值 (4)能使用print()函数输出每个对象的相关信息

三、主要程序清单和程序运行结果

第1题

1、定义一个表示时间的类Time,要求它提供下面操作: (1)Time(hours,minutes,seconds)创建一个时间对象 (2)t.hours()、t. minutes()和t. seconds()分别返回时间对象t的小时、分钟和秒钟值 ()使用运算符==和<判断两个时间对象的相等和小于关系 (4)使用运算符+和-为Time对象定义加法和减法操作,例如t1+t1表示基于当前时间t1向后延长一段t2时间,而t1-t2则表示基于当前时间t1向前提前一段t2时间。 提示:()和(4)要应用运算符重载

代码语言:javascript代码运行次数:0运行复制
class Time:
    def __init__(self, hours, minutes, seconds):
        self._hours = hours
        self._minutes = minutes
        self._seconds = seconds
    
    def hours(self):
        return self._hours
    
    def minutes(self):
        return self._minutes
    
    def seconds(self):
        return self._seconds
    
    def __eq__(self, other):
        if isinstance(other, Time):
            return (self._hours == other.hours() and
                    self._minutes == () and
                    self._seconds == other.seconds())
        return False
    
    def __lt__(self, other):
        if isinstance(other, Time):
            if self._hours < other.hours():
                return True
            elif self._hours == other.hours():
                if self._minutes < ():
                    return True
                elif self._minutes == ():
                    if self._seconds < other.seconds():
                        return True
            return False
    
    def __add__(self, other):
        if isinstance(other, Time):
            total_seconds = (self._hours * 600 + self._minutes * 60 + self._seconds +
                             other.hours() * 600 + () * 60 + other.seconds())
            hours = total_seconds // 600
            minutes = (total_seconds % 600) // 60
            seconds = (total_seconds % 600) % 60
            return Time(hours, minutes, seconds)
    
    def __sub__(self, other):
        if isinstance(other, Time):
            total_seconds = (self._hours * 600 + self._minutes * 60 + self._seconds -
                             other.hours() * 600 - () * 60 - other.seconds())
            hours = total_seconds // 600
            minutes = (total_seconds % 600) // 60
            seconds = (total_seconds % 600) % 60
            return Time(hours, minutes, seconds)

h1 = int(input("请输入第一个时间的小时数:"))
m1 = int(input("请输入第一个时间的分钟数:"))
s1 = int(input("请输入第一个时间的秒钟数:"))
t1 = Time(h1, m1, s1)

h2 = int(input("请输入第二个时间的小时数:"))
m2 = int(input("请输入第二个时间的分钟数:"))
s2 = int(input("请输入第二个时间的秒钟数:"))
t2 = Time(h2, m2, s2)

if t1 == t2:
    print("t1 等于 t2")
else:
    print("t1 不等于 t2")
if t1 < t2:
    print("t1 小于 t2")
else:
    print("t2 小于 t1")

t = t1 + t2
print("两个时间相加的结果为:{}小时{}分钟{}秒钟".format(t.hours(), (), t.seconds()))
t4 = t1 - t2
print("两个时间相减的结果为:{}小时{}分钟{}秒钟".format(t4.hours(), (), t4.seconds()))

以上代码定义了一个 Time 类,用于表示时间。该类包含以下方法和功能:

  • __init__(self, hours, minutes, seconds): 初始化方法,接受小时、分钟和秒钟作为参数,并将它们存储在对象的实例变量中。
  • hours(self), minutes(self), seconds(self): 这些方法用于获取对象实例中存储的小时、分钟和秒钟值。
  • __eq__(self, other): 重载了相等运算符 ==,用于比较两个 Time 对象是否相等。
  • __lt__(self, other): 重载了小于运算符 <,用于比较两个 Time 对象的大小关系。
  • __add__(self, other): 重载了加法运算符 +,实现了两个 Time 对象的相加操作。
  • __sub__(self, other): 重载了减法运算符 -,实现了两个 Time 对象的相减操作。

在主程序中,用户可以输入两个时间对象 t1 和 t2,然后进行以下操作:

  • 检查 t1 是否等于 t2,并输出相应信息。
  • 检查 t1 是否小于 t2,并输出相应信息。
  • 将 t1 和 t2 相加,将结果存储在 t 中,并输出相加结果。
  • 将 t1 和 t2 相减,将结果存储在 t4 中,并输出相减结果。

这样,用户可以使用 Time 类来进行时间对象的比较、相加和相减操作。整体而言,这个代码实现了一个简单的时间处理功能。

运行结果:

第2题

2、假设学校成员类(SchoolMember)具有成员的姓名(name)、年龄(age)、性别()属性。教师类(Teacher)继承了学校成员类,该类还记录了教师的职称(title)、工资(salary)、奖金(prize)等信息。学生类(Teacher)也继承了学校成员类,该类还记录了学生所属系部(dept)、成绩(score)等信息。请定义以上个类,要求同时满足如下功能: (1)创建教师和学生对象时需要调用父类方法进行必要的初始化 (2)能反映学校成员总人数的增减变化,即每创建一个对象时,则总人数加1;而对象注销时,总人数减1 ()能够计算每位教师的总收入(工资+奖金),虽然不允许直接访问总收入,但可以通过提供相应的方法返回总收入值 (4)能使用print()函数输出每个对象的相关信息

代码语言:javascript代码运行次数:0运行复制
class SchoolMember:
    total_members = 0

    def __init__(self, name, age, ):
         = name
        self.age = age
        self. = 
        _members += 1

    def __del__(self):
        _members -= 1

    def get_info(self):
        return f"ame: {}, Age: {self.age}, Sex: {self.}"


class Teacher(SchoolMember):
    def __init__(self, name, age, , title, salary, prize):
        super().__init__(name, age, )
         = title
        self.salary = salary
        self.prize = prize

    def get_total_income(self):
        return self.salary + self.prize

    def get_info(self):
        return f"{super().get_info()}, Title: {}, Salary: {self.salary}, Prize: {self.prize}"


class Student(SchoolMember):
    def __init__(self, name, age, , dept, score):
        super().__init__(name, age, )
        self.dept = dept
        self.score = score

    def get_info(self):
        return f"{super().get_info()}, Department: {self.dept}, Score: {self.score}"


# 添加成员信息
def add_member():
    member_type = input("请输入成员类别(teacher or student): ")
    if member_type == "teacher":
        teacher_input = input("请输入教师信息(name, age, , title, salary, prize): ")
        teacher_info = teacher_input.split(",")
        teacher = Teacher(*teacher_info)
        members.append(teacher)
        print(f"增加老师: {teacher.get_info()}")
    elif member_type == "student":
        student_input = input("请输入学生信息(name, age, , department, score): ")
        student_info = student_input.split(",")
        student = Student(*student_info)
        members.append(student)
        print(f"增加学生: {student.get_info()}")
    else:
        print("无效成员类别")


# 注销成员信息
def remove_member():
    name = input("请输入成员姓名: ")
    for member in members:
        if  == name:
            members.remove(member)
            del member
            print(f"{name}注销成功")
            return
    print(f"{name}未到")


members = []
while True:
    choice = input("请输入操作:(add, remove, info, quit): ")
    if choice == "add":
        add_member()
    elif choice == "remove":
        remove_member()
    elif choice == "info":
        for member in members:
            print(member.get_info())
        print(f"总成员数: {_members}")
    elif choice == "quit":
        break
    else:
        print("无效操作")

print("程序结束")
print("所有成员信息:")
for member in members:
    print(member.get_info())

这段代码实现了一个简单的学校成员管理系统,包括 SchoolMember 类和其子类 Teacher 和 Student。

(1)类的定义:

  • SchoolMember 类:表示学校成员,包含基本信息(姓名、年龄、性别)和一个类变量 total_members 记录总成员数。__init__ 方法用于初始化成员信息,__del__ 方法用于注销成员时减少总成员数,get_info 方法返回成员信息。
  • Teacher 类:继承自 SchoolMember 类,增加了教师特有信息(职称、工资、奖金),并实现了计算总收入和重写 get_info 方法。
  • Student 类:也继承自 SchoolMember 类,增加了学生特有信息(系别、成绩),并重写了 get_info 方法。

(2)添加成员信息函数 add_member():根据用户输入的成员类别(教师或学生),接收相应的信息并创建对应的对象,然后将对象添加到成员列表中,并输出添加成功的信息。

()注销成员信息函数 remove_member():根据用户输入的成员姓名,在成员列表中查并删除相应的成员,然后输出注销成功或未到的信息。

(4)主程序部分:通过不断循环接受用户输入,实现了添加成员、注销成员、显示所有成员信息和退出程序的功能。根据用户输入执行相应操作,并输出结果。

(5)最后输出所有成员信息,并结束程序运行。

整体而言,这个程序提供了一个简单的学校成员管理系统,能够方便地添加、查看和删除教师和学生的信息。

运行结果:

四、实验结果分析与体会

通过本次实验,掌握了类的定义与对象的创建、类的继承与方法的覆盖;理解类变量与实例变量的区别,能正确应用私有成员保护机制和运算符重载。理解类和对象,在Python面向对象编程中,类是对象的抽象,对象是类的实例。类定义了一组属性和方法,而对象则是具有这些属性和方法的实体。理解这一点对于理解面向对象编程至关重要。

封装是面向对象编程的基础。通过封装,我们可以把数据和操作数据的函数绑定到一起,形成一个整体,也就是对象。这样可以保护内部数据的安全,也使得代码更加清晰和易于维护。继承是面向对象编程中的一个重要特性。通过继承,子类可以继承父类的所有属性和方法,同时还可以添加自己特有的属性和方法。这样可以有效地提高代码的复用性。多态是指同一个方法在不同的对象上可能会产生不同的行为。Python是一种动态类型语言,所以它的多态性主要体现在运行时。理解多态可以使我们的代码更加灵活和通用。在面向对象编程中,我们需要处理各种可能出现的错误和异常。Python提供了一套完善的异常处理机制,可以帮助我们更好地处理这些问题。Python的装饰器是一种非常强大的工具,它可以用来修改或增强函数或类的功能。在面向对象编程中,装饰器可以帮助我们更好地管理和维护代码。

通过这次实验,我对Python面向对象编程有了更深入的理解,也提高了我的编程技能。我认为,面向对象编程不仅是一种编程范式,更是一种思维方式,它可以帮助我们更好地分析问题,设计解决方案。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-08-18,如有侵权请联系 cloudcommunity@tencent 删除编程对象继承python面向对象编程

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1139164.html

相关标签:无
上传时间: 2025-07-19 05:17:41
留言与评论(共有 9 条评论)
本站网友 张飚
17分钟前 发表
if isinstance(other
本站网友 海丰社区
11分钟前 发表
hours
本站网友 钱柜ktv电话
11分钟前 发表
学生应掌握类的定义与对象的创建
本站网友 上海文化花园
13分钟前 发表
prize)
本站网友 皇冠怎么样
26分钟前 发表
面向对象编程不仅是一种编程范式
本站网友 惠普系统下载
3分钟前 发表
name
本站网友 保利星苑
20分钟前 发表
other)
本站网友 猫爪菜
4分钟前 发表
主要程序清单和程序运行结果第1题 1