实现自定义序列化类,要求该类可以实现编号,姓名,年龄的序列化
时间: 2023-07-18 08:04:13 浏览: 51
要实现自定义序列化类,需要做以下几步:
1. 创建一个类,并在类中定义需要序列化的属性,如编号、姓名和年龄。
2. 实现 `__init__()` 方法,用来初始化对象的属性。
3. 实现 `__str__()` 方法,用来返回对象的字符串表示形式。
4. 实现 `__eq__()` 方法,用来比较两个对象是否相等。
5. 实现 `__hash__()` 方法,用来生成对象的哈希值。
6. 实现 `__getstate__()` 方法,用来返回对象的属性字典。
7. 实现 `__setstate__()` 方法,用来设置对象的属性。
下面是一个示例代码,实现了一个可以序列化编号、姓名和年龄的类:
``` python
import pickle
class Person:
def __init__(self, id, name, age):
self.id = id
self.name = name
self.age = age
def __str__(self):
return f"Person(id={self.id}, name='{self.name}', age={self.age})"
def __eq__(self, other):
return isinstance(other, Person) and self.id == other.id and self.name == other.name and self.age == other.age
def __hash__(self):
return hash((self.id, self.name, self.age))
def __getstate__(self):
return {'id': self.id, 'name': self.name, 'age': self.age}
def __setstate__(self, state):
self.id = state['id']
self.name = state['name']
self.age = state['age']
p1 = Person(1, "Tom", 20)
p2 = Person(2, "Jerry", 22)
# 序列化对象
with open('person.pkl', 'wb') as f:
pickle.dump(p1, f)
pickle.dump(p2, f)
# 反序列化对象
with open('person.pkl', 'rb') as f:
p3 = pickle.load(f)
p4 = pickle.load(f)
print(p1)
print(p2)
print(p3)
print(p4)
```
输出结果如下:
```
Person(id=1, name='Tom', age=20)
Person(id=2, name='Jerry', age=22)
Person(id=1, name='Tom', age=20)
Person(id=2, name='Jerry', age=22)
```
可以看到,通过序列化和反序列化,我们成功地将 `Person` 对象保存到了文件中,并且能够重新加载它们。