根据 PyTables 文档,定义嵌套类型的唯一方法似乎是使用嵌套类型实例创建类级别/静态字段,或者在父类中定义嵌套类。
问题是,一个非常常见的树表示只是使用带有子节点实例的节点类型。通常,这对于 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 类型的数据和 Node 子级定义,目前我无法用 PyTables 表示它。有没有我错过的技巧?