本帖最后由 阿奇_o 于 2021-10-24 15:16 编辑
其实是他用纯Python的方式自己实现了"数据对象的持久化功能"。
或者说是"序列化"和"反序列化",将运行时的内存对象保存到磁盘文件里,和反过来的功能。
比如,这里的save_student()即完成"序列化"的功能,把Student对象实例,写进了student.data文件里; load_student()则实现"反序列化"。
实际中,"持久化"应该用json或pickle这两个模块更常见。
------------
补充:简化成下面这样子,希望你看得懂~class Student:
def __init__(self, name, gender, tel):
self.name = name
self.gender = gender
self.tel = tel
class StuManager():
def __init__(self):
self.student_list = []
def save_student(self):
""" 序列化 """
with open('student.data', 'w') as f:
new_list = [i.__dict__ for i in self.student_list]
for i in self.student_list:
print(i.__dict__)
f.write(str(new_list))
def load_student(self):
""" 反序列化 """
with open('student.data', 'r') as f:
new_list = eval(f.read())
self.student_list = [Student(i['name'], i['gender'], i['tel']) for i in new_list]
# print(self.student_list)
return self.student_list
# 测试:
s1 = Student('Alice', 'F', 13612341001)
s2 = Student('Bill', 'M', 13612341002)
sm = StuManager()
sm.student_list.append(s1)
sm.student_list.append(s2)
sm.save_student() # 序列化到文件student.data
del sm # 销毁实例,验证后面反序列化是否成功
# print(sm.student_list) # 报错,因为sm已不存在。
sm2 = StuManager()
stu_list = sm2.load_student()
print(stu_list) # 可以看到 反序列化的结果
for obj in stu_list:
print(obj.__dict__)
|