Python を使用すればするほど、Pythonic の方法で実行したい、つまり isinstance クエリなどを避けたいと思うようになりました。数値シミュレーション用の科学的パラメーター探索のフレームワークを開発しています。
私は 2 つの厳しい制約に取り組んでいます。まず、ディスクに保存した特定のシミュレーションを、最初に実行したときとまったく同じように再現できる必要があります。第 2 に、データは hdf5/pytables 形式で適切に読み取り可能である必要があります。
両方の概念は少し反対です。pytables データとして保存するとすぐに、一部の情報が失われます。たとえば、python int をリロードすると、numpy.int64 になります。これは、数値シミュレーションを再実行する場合に問題になる可能性があります。変数と int の乗算は正常に機能するが、numpy.int64 で使用すると壊れる場合があるためです。たとえば、スパイキング ニューラル ネットワーク シミュレータ BRIAN を使用する場合がこれに該当します。
したがって、簡単な答えは、単にすべてをピクルスにして、以前の状態に戻すことです。しかし、これは読み取り可能な hdf5 配列またはテーブル データのアイデアではうまく機能しません。
したがって、元のデータ形式を hdf5 属性として対応するテーブルまたは配列に格納し、この情報を使用して元のデータを再構築することを念頭に置いています。第一に、それは一般的に良い考えですか、第二に、それを行うための最もpythonicな方法は何ですか?
たとえば、これはどうでしょうか。
original_class_name = data.__class__.__name__
# do the storage of data and the original_class_name
{...}
# load the hdf5data and reconstruct it
reconstructed_data = eval(original_class_name+'(hdf5data)')
私にはこれはハッキーすぎるようです。