类型注册
本页介绍 Python 类型注册 API。严格模式策略、最大深度限制和可信数据指南参见 Python 安全。
类型注册
按类型名注册跨语言类,使其他语言能够解析相同的 Schema 标识:
from dataclasses import dataclass
import pyfory
fory = pyfory.Fory(xlang=True, strict=True)
@dataclass
class User:
name: str
age: pyfory.Int32
fory.register(User, name="example.User")
对于 Python 原生模式,数字类型 ID 是紧凑的同语言注册方式:
import pyfory
fory = pyfory.Fory(xlang=False, strict=True)
fory.register(MyClass, type_id=100)
注册模式
使用与载荷契约匹配的注册形式:
# Xlang: stable name identity
fory.register(MyClass, name="com.example.MyClass")
# Native mode: compact numeric identity
fory.register(MyClass, type_id=100)
# Custom serializer
fory.register(MyClass, type_id=100, serializer=MySerializer(fory.type_resolver, MyClass))
# Batch registration
type_id = 100
for model_class in [User, Order, Product, Invoice]:
fory.register(model_class, type_id=type_id)
type_id += 1
与严格模式的关系
设置 strict=True 后,Fory 只加载并实例化已注册的应用类。请在序列化或反序列化载荷前注册应用类,并在共享这些载荷的每个对等端保持相同的注册 ID 或名称。
兼容元数据有一个仅数据例外:远程 Struct 没有本地注册时,反序列化会返回框架固定的 pyfory.UnknownStruct 值,而不是加载或生成发送端的类。应用需要具体应用对象时,请在本地注册该类。