跳到主要内容
版本:dev

序列化钩子

Python 原生模式在写入 Fory 原生字节时会遵循 Python 对象自定义协议,但不会输出 Pickle 编码数据。替代 pickle 或 cloudpickle,或由类控制其归约、构造或状态恢复时,请参考本页。

替代 Pickle 与 Cloudpickle

现有边界使用 picklecloudpickle 时,应选择 Python 原生模式。与 JSON 和跨语言模式相比,它支持更丰富的 Python 值,包括 Python 函数、本地类、闭包和归约钩子。

载荷需要跨越语言边界,或数据模型应是与其他 Fory 实现共享的可移植 Schema 时,请改用跨语言模式。

自定义 Python 对象钩子

原生模式遵循常见的 Python 自定义钩子:

import pyfory

class SessionToken:
def __init__(self, value):
self.value = value

def __getstate__(self):
return {"value": self.value}

def __setstate__(self, state):
self.value = state["value"]

fory = pyfory.Fory(xlang=False, strict=False)
token = fory.loads(fory.dumps(SessionToken("abc")))
print(token.value) # abc

这些钩子仅用于 Python 载荷。对于跨语言载荷,请改用带可移植字段注解的 dataclass 建模数据。

协议 5 缓冲区

归约钩子可以公开 Pickle 协议 5 缓冲区。传输方式和缓冲区回调流程参见带外缓冲区