我该如何理解酸洗和反酸洗工作原理的描述?

Tim*_*Tim 0 python pickle python-3.x

我对以下关于Python in a Nutshell 中的 pickling 和 unpickling 的描述感到困惑。我不清楚“否则”和“在这种情况下”的用法,我不确定它们指的是哪种情况。如果您能以更清晰的方式(也许是伪代码)重新表述它,我将不胜感激。

\n\n
\n

下面是 pickle 如何保存类 \n T 的实例对象 x 的状态,然后将保存的状态重新加载到 T \n 的新实例 y (重新加载的第一步始终是创建一个新的空\n 实例 y T ,除非我们在下面明确说明\n):

\n\n

\xe2\x80\xa2 当 T 提供方法 时__getstate__,pickle 保存调用的\n 结果T.__getstate__(x)

\n\n

\xe2\x80\xa2 当T提供方法 时__setstate__d 可以是任何\n 类型,pickle 通过调用 \n 重新加载保存的状态 T.__setstate__(y, d)

\n\n

\xe2\x80\xa2 否则, d 必须是字典,而 pickle 只是设置 \n y.__dict__ = d

\n\n

\xe2\x80\xa2 否则,当 T 提供方法 __getnewargs__且 pickle 正在使用协议 2 或更高协议进行 pickle 时,pickle 会保存调用 t 的 结果T.__getnewargs__(x)t 必须是一个元组。

\n\n

在这种情况下, \xe2\x80\xa2 pickle 不是以空开头 y,而是 y 通过执行来 创建y = T.__new__(T, *t),从而结束重新加载。

\n\n

\xe2\x80\xa2 否则,默认情况下,pickle 保存为 d 字典\n x.__dict__

\n\n

\xe2\x80\xa2 当 T 提供方法 时__setstate__,pickle 通过调用重新加载保存的状态 T.__setstate__ (y, d)

\n\n

\xe2\x80\xa2 否则,pickle 只是设置 y.__dict__ = d

\n
\n

jas*_*per 6

该描述确实需要缩进或其他东西来更好地表明什么与什么相关。以下是它试图通过流程图表达的内容: 在此输入图像描述