Python字典实现报名列表类与JSON序列化代码优化咨询
现有代码的核心问题
- 方法命名完全不符合规范:Python中前后带双下划线的是解释器预留的魔法方法,自定义业务方法不需要加这种前后双下划线,现有
__addEnrollment__这类写法是错误的,且方法内部没有任何实际存储逻辑,直接返回Enrollment类本身没有任何作用。 - 存储逻辑混乱:你让
ListOfEnrollments继承了dict类,却去操作self.__dict__——这个属性是用来存储实例自身属性的,和继承来的dict存储结构完全独立,数据根本不会存到你预期的字典结构里。 - 方法参数和语法错误:需求里
get方法只需要接收报名编码一个查询参数,你写的方法传了所有报名字段;drop方法你错写成了__delitem__,且方法定义行末尾缺少冒号,运行直接报语法错误。 - 序列化逻辑完全不成立:最后一行直接调用
json.loads但从未定义enrollment_string变量,且自定义类的实例无法直接被json模块序列化,直接dump会报类型错误。
可直接运行的正确实现
import json class Enrollment: def __init__(self, code, enroll_date, course_name, student_id, exam_date): # 重命名参数避免两个date字段语义混淆 self.code = code self.enroll_date = enroll_date self.course_name = course_name self.student_id = student_id self.exam_date = exam_date def to_dict(self): # 把实例属性转为普通字典,解决自定义类无法JSON序列化的问题 return { "code": self.code, "enroll_date": self.enroll_date, "course_name": self.course_name, "student_id": self.student_id, "exam_date": self.exam_date } class ListOfEnrollments: def __init__(self): # 内部单独维护字典存储结构,key为唯一的报名编码,value为Enrollment实例 self._enrollment_map = {} def addEnrollment(self, code, enroll_date, course_name, student_id, exam_date): # 新增前做重复校验,避免编码冲突覆盖数据 if code in self._enrollment_map: raise ValueError(f"报名编码 {code} 已存在,不可重复添加") self._enrollment_map[code] = Enrollment(code, enroll_date, course_name, student_id, exam_date) def get(self, code): # 按编码查询,匹配不到直接返回None record = self._enrollment_map.get(code) return record.to_dict() if record else None def drop(self, code): # 按编码删除,匹配不到直接抛键错误 if code not in self._enrollment_map: raise KeyError(f"报名编码 {code} 不存在,删除失败") del self._enrollment_map[code] def toJSON(self): # 先把所有实例转成字典列表,再序列化为JSON字符串 all_records = [item.to_dict() for item in self._enrollment_map.values()] return json.dumps(all_records, ensure_ascii=False)
关键逻辑说明
- 内部字典存储:不要混用
self.__dict__和业务存储结构,单独定义带下划线前缀的内部属性_enrollment_map存数据,用唯一报名编码当key,查询、删除的时间复杂度为O(1),比列表遍历效率高很多。 - JSON序列化:json模块默认只支持字典、列表、字符串、数字等基础内置类型,自定义类实例不能直接序列化,给
Enrollment加to_dict()方法做一层转换即可,加ensure_ascii=False参数是为了中文不会被转成Unicode编码,输出可读性更好。 - 鲁棒性优化:新增、删除、查询操作加简单的存在性判断,出错时直接抛出明确的异常信息,比静默失败更方便排查问题。
简单使用示例
# 初始化报名列表 enroll_system = ListOfEnrollments() # 新增一条报名记录 enroll_system.addEnrollment( code="CS1001-20240601", enroll_date="2024-05-20", course_name="Python程序设计基础", student_id="202400123", exam_date="2024-06-15" ) # 查询记录 print(enroll_system.get("CS1001-20240601")) # 导出JSON字符串 json_str = enroll_system.toJSON() print(json_str) # 删除记录 enroll_system.drop("CS1001-20240601")
内容的提问来源于stack exchange,提问作者SergioxDD
相关产品推荐
相关产品推荐

