Python打字,pickle和序列化

时间:2018-05-14 10:42:45

标签: python-3.x serialization pickle typing

我已经开始在python中学习打字系统,并且在定义可选择的函数参数时遇到了一个问题。并不是python中的所有内容都可以被pickle,我可以定义一个类型注释,说“只接受可以选择的对象”吗?

起初它听起来应该是可能的,类似于Java Serializable,但是在python中没有Picklable接口,并且考虑到这个问题,我发现酸洗更多的是本质上的运行时任务。 What can be pickled列出了许多可以被腌制的东西,并且不难想象一个lambda函数的容器是不可拾取的,但是我想不出一种确定之前的方法(没有触及容器定义)。

我提出的唯一方法是定义类似于What can be pickled中列出的所有内容的typing.Union[Callable, Iterable, ...],但这似乎不是一个好的解决方案。

1 个答案:

答案 0 :(得分:1)

github上的这个问题部分回答了这个问题,虽然问题与TEXT而不是json特别相关,但Guido的第一个答案仍应适用于pickle

  

我尝试这样做但是递归类型别名现在在mypy中不起作用,我不确定如何使其工作。与此同时,我使用JsonDict = Dict [str,Any](这不是很有用,但至少说明键是字符串),而Any适用于需要更通用的JSON类型的地方。

https://github.com/python/typing/issues/182