PyTables のドキュメントに基づくと、ネストされた型を定義する唯一の方法は、ネストされた型のインスタンスでクラス レベル/静的フィールドを作成するか、親クラスでネストされたクラスを定義することです。
問題は、非常に一般的なツリー表現が、子 Node インスタンスを持つ Node タイプを単純に使用していることです。通常、これは Python クラスの問題ではありません。これは、動的型付けによって子 (ren) の型を定義する必要がなく、実行時に Node インスタンスを別の Node インスタンスに子として追加できるためです。
一方、PyTables では、フィールドの型を定義する必要があります。Python のクラス定義はクラス レベル フィールドの初期化で使用できないため、親子構造定義の最も一般的な方法は使用できなくなります。これが HDF5 レベルに存在する制約であるかどうかはわかりません (確認しませんでした)。問題の例を次に示します。
class A(IsDescription):
valstring = StringCol(250, pos=1)
child = A()# IMPOSSIBLE
class A(IsDescription):
valstring = StringCol(250, pos=1)
#the following would work, but now I can't define
#another AChild as child, so I got stuck with depth 1
class AChild(IsDescription):
valstring = StringCol(250, pos=1)
class ANewChild(IsDescription):
valstring = ....#useless
タイプ Node with Node children 定義に適合するデータがあり、現時点では PyTables で表現できません。私が見逃しているトリックはありますか?