__reduce__和__reduce_ex__有什么区别?
我知道这些方法是用来进行“序列化”和“反序列化”的,和内置的reduce函数没有关系。但是这两者有什么区别呢?我们为什么需要这两者呢?
2 个回答
9
__reduce_ex__
是一个本来应该是 __reduce__
的功能,但它没有变成的东西。__reduce_ex__
的工作方式和 __reduce__
类似,但它会传递一个叫做“pickle协议”的东西。
35
文档上说:
如果提供了,在进行“序列化”(也就是把对象转换成可以存储或传输的格式)时,
__reduce__()
方法会被调用,而且不需要传入任何参数。这个方法必须返回一个字符串或者一个元组。
另一方面,
在实现
__reduce__
时,有时候知道协议版本是很有用的。你可以通过实现一个叫__reduce_ex__
的方法来做到这一点,而不是使用__reduce__
。如果__reduce_ex__
存在,它会优先于__reduce__
被调用(你仍然可以提供__reduce__
以保持向后兼容)。__reduce_ex__
方法会接收一个整数参数,这个参数就是协议版本。
另外,Guido 说 这是一个可以改进的地方。