You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中让Teacher类修改Student类的考勤属性并存储?

学生考勤系统实现方案

修正基础类的错误

原代码中super.__init__的调用方式有误,Python中调用父类构造函数应该用super().__init__(...),不需要传递self参数。

核心功能实现思路

  • 给每个学生维护一份按日期存储的考勤记录,用字典结构,键为日期字符串(比如'2024-09-01'),值为'present'或'absent'。
  • 教师类负责管理学生列表,并提供批量记录单日考勤和导出考勤到文件的功能。

完整实现代码

class Person():
    def __init__(self, first_name, last_name, date_of_birth, national_id, living_area, email):
        self.first_name = first_name
        self.last_name = last_name
        self.date_of_birth = date_of_birth
        self.national_id = national_id
        self.living_area = living_area
        self.email = email

class Teacher(Person):
    def __init__(self, first_name, last_name, date_of_birth, national_id, living_area, email, work_experience, salary):
        super().__init__(first_name, last_name, date_of_birth, national_id, living_area, email)
        self.work_experience = work_experience
        self.salary = salary
        self.students = []  # 教师负责管理的学生列表

    def add_student(self, student):
        """添加学生到管理列表"""
        if isinstance(student, Student):
            self.students.append(student)

    def take_daily_attendance(self, date, attendance_statuses):
        """
        记录单日考勤
        :param date: 日期字符串,如'2024-09-01'
        :param attendance_statuses: 字典,键为Student对象,值为'present'/'absent'
        """
        for student, status in attendance_statuses.items():
            if student in self.students and status in ('present', 'absent'):
                student.attendance_records[date] = status

    def export_attendance_to_file(self, filename):
        """将所有学生的考勤记录导出到txt文件"""
        with open(filename, 'w', encoding='utf-8') as f:
            # 先写表头:姓名 + 所有日期
            if self.students and self.students[0].attendance_records:
                dates = sorted(self.students[0].attendance_records.keys())
                f.write(f"学生姓名\t{'\t'.join(dates)}\n")
                # 遍历每个学生写入考勤
                for student in self.students:
                    full_name = f"{student.first_name} {student.last_name}"
                    attendance_values = [student.attendance_records.get(date, '未记录') for date in dates]
                    f.write(f"{full_name}\t{'\t'.join(attendance_values)}\n")
            else:
                f.write("暂无考勤记录\n")

class Student(Person):
    def __init__(self, first_name, last_name, date_of_birth, national_id, living_area, email, grade):
        super().__init__(first_name, last_name, date_of_birth, national_id, living_area, email)
        self.grade = grade
        self.attendance_records = {}  # 存储考勤:{日期: 状态}

# 使用示例
if __name__ == "__main__":
    # 创建教师
    teacher = Teacher("Li", "Ming", "1985-05-10", "110101198505101234", "Beijing", "liming@school.com", 10, 8000)
    # 创建学生
    student1 = Student("Zhang", "San", "2010-03-15", "110101201003154321", "Beijing", "zhangsan@school.com", 7)
    student2 = Student("Wang", "Wu", "2010-06-20", "110101201006201234", "Beijing", "wangwu@school.com", 7)
    # 添加学生到教师管理列表
    teacher.add_student(student1)
    teacher.add_student(student2)
    # 记录9月1日考勤
    teacher.take_daily_attendance('2024-09-01', {student1: 'present', student2: 'absent'})
    # 记录9月2日考勤
    teacher.take_daily_attendance('2024-09-02', {student1: 'absent', student2: 'present'})
    # 导出到文件
    teacher.export_attendance_to_file('attendance_records.txt')

代码说明

  1. Student类:新增attendance_records字典,专门存储该学生每天的考勤状态。
  2. Teacher类:
    • 新增students列表,用于管理负责的学生。
    • add_student方法:添加学生到管理列表,确保只有Student对象能被添加。
    • take_daily_attendance方法:接收日期和当天的考勤状态字典,批量给学生标记当天的考勤,同时做合法性检查(学生必须在教师的管理列表中,状态只能是指定值)。
    • export_attendance_to_file方法:将所有学生的考勤按表格形式写入txt文件,先写日期表头,再逐行写入每个学生的姓名和对应日期的考勤状态。
  3. 使用示例:演示了创建师生、添加学生、记录多日考勤、导出文件的完整流程。

内容的提问来源于stack exchange,提问作者Mfighter29

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 17:46:31