Основываясь на документации PyTables, кажется, что единственным способом определения вложенных типов является либо создание класса/статического поля с экземпляром вложенного типа, либо определение вложенного класса в родительском классе.Как определить структуру вложенных узлов с использованием того же типа для родительского и дочернего в PyTables?
Проблема заключается в том, что очень распространенное древовидное представление просто использует тип узла с дочерними узлами. Как правило, это не проблема для класса Python, поскольку динамическая типизация не заставляет меня определять тип дочернего элемента (ren), а во время выполнения экземпляр 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
У меня есть данные, что соответствует тип узла с узлом определения детей, и я не могу представить его с PyTables в данный момент. Есть ли трюк, который мне не хватает?
Мне это известно. Я написал «Так как определение класса в Python не может быть использовано в инициализации поля уровня класса ...» в моем вопросе. pyTables использует переменные класса. Поэтому я должен использовать переменные класса, следовательно: проблема, которую я объяснил в своем вопросе. – mahonya
Вид сверх этого. Добавлены некоторые подсказки, которые могут помочь в ответе. –