ホームページ >バックエンド開発 >Python チュートリアル >Pythonオブジェクトのシリアル化と脱介入:パート1
Pythonオブジェクトのシリアル化と脱介入は、非自明のプログラムの重要な側面です。 Pythonファイルに何かを保存すると、構成ファイルを読み取る場合、またはHTTPリクエストに応答する場合、オブジェクトシリアル化と脱滑り化を行います。
シリアル化と脱派化は、ある意味で世界で最も退屈なものです。これらすべての形式とプロトコルを気にするのは誰ですか? Pythonオブジェクトを維持またはストリーミングし、後で完全に取得したいと考えています。
これは、概念レベルで世界を見るのに最適な方法です。ただし、実用的なレベルでは、選択したシリアル化スキーム、形式、またはプロトコルは、プログラムが実行される速さ、セキュリティ、メンテナンスの自由、および他のシステムとの相互運用性の程度を決定する場合があります。
異なる状況には異なる解決策が必要であるため、非常に多くの選択肢があります。 「ワンサイズフィット」アプローチは機能しません。この2部構成のチュートリアルでは、次のようになります
単純なオブジェクト図
def decode_object(o):
file "serialize.py"、in
print(json.dumps
file "/usr/lib/python3.8/json/ j)file "/usr/lib/python3.8/json/encoder.py"、line 199、エンコード
chunks = self.iterencode(o、_one_shot = true)
ファイル.py "、行179、デフォルトclass。
name} '
typeerror:タイプAのオブジェクトはjsonシリアル化できません
哇!这看起来一点也不好。发生了什么?错误消息是 JSONEncoder 类使用的 default() 方法在 JSON 编码器遇到无法序列化的对象时调用的。
自定义编码器的任务是将其转换为 JSON 编码器能够编码的 Python 对象图。在本例中,我们有两个需要特殊编码的对象:A 类。以下编码器可以完成这项工作。每个特殊对象都转换为“\_\_A\_\_”和 pprint 函数的 load() 和 object_hook 参数,允许您提供自定义函数来将字典转换为对象。
if 'aa
' in o:
a = a()a。dict.update(o ['a
'] ' dateTime
' in o:
return datetime.sttime(o ['dateTime']、 '%y-%m-%dt%h:%m:%s)
deserialized = json.loads(serialized、object_hook = decode_object)print(deserialized)
#印刷:{'a':<main
.a at = "" object = "&gt; 0)} <code>
让我们使用 object_hook 参数进行解码。
</code>
deserialized == complex
#false
&lt;/main.a&gt; に評価します
以上がPythonオブジェクトのシリアル化と脱介入:パート1の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。