|
50鱼币
本帖最后由 isdkz 于 2022-4-15 21:19 编辑
在下面的代码中,定义了一个类Student,并实现了构造方法和特殊方法__str__()、
__repr__()。函数 main() 接收一个 Student 类的对象 stu 作为参数,返回一个元组,
元组中有两个元素,分别为 pickle 对 stu 序列化的结果 stu_dumped 和 对 stu_dumped
反序列化的结果。要求为类 Student 增加新的特殊方法,使得 pickle 模块的函数 dumps() 对
类 Student 的对象 stu 进行序列化时,如果对象 stu 是女生,序列化得到的结果字节串
中不包含数据成员 age 的信息,如果对象 stu 是男生就在序列化时包含全部数据成员。
反序列化时,如果是男生就直接反序列化创建对象,如果是女生就把新对象的数据成员
age 设置为 18。
删除下面代码中的 pass,替换为自己的代码,完成要求的功能。
- from pickle import dumps, loads
- class Student:
- def __init__(self, username, sex, age):
- '''username为字符串,sex为'Female'或'Male',age为正整数'''
- self.username = username
- self.sex = sex
- self.age = age
- def __str__(self):
- return str(self.__dict__)
- __repr__ = __str__
-
- pass
- def main(stu):
- stu_dummped = dumps(stu)
- return (stu_dummped, loads(stu_dummped))
复制代码
- from pickle import dumps, loads
- class Student:
- def __init__(self, username, sex, age):
- '''username为字符串,sex为'Female'或'Male',age为正整数'''
- self.username = username
- self.sex = sex
- self.age = age
- def __str__(self):
- return str(self.__dict__)
- __repr__ = __str__
-
- def __getstate__(self):
- dic = self.__dict__.copy()
- if dic["sex"] == "Female":
- del dic["age"]
- return dic
- def __setstate__(self, state):
- self.__dict__.update(state)
- if (state["sex"] == "Female"):
- self.__dict__["age"] = 18
- def main(stu):
- stu_dummped = dumps(stu)
- return (stu_dummped, loads(stu_dummped))
- # s1 = Student("abc", "Male", 20)
- # s2 = Student("def", "Female", 20)
- # print(main(s2))
复制代码
|
|