我正在尝试创建一个IsDescription
子类,以便我可以定义我正在尝试创建的表的结构。子类**的一个属性需要在给定一定长度之前进行整形,这个长度在运行时是未知的(它取决于正在解析的文件),但在运行时是固定的。
示例代码:
import tables
class MyClass(tables.IsDescription):
def __init__(self, param):
var1 = tables.Float64Col(shape=(param))
MyClass1 = MyClass(12)
返回:TypeError: object.__new__() takes no parameters
。使用self.var1 = ...
会产生同样的错误。
在this SO question中,问题被列为因为IsDescription
是元类,但没有理由说明为什么元类会禁止此行为,并且没有给出解决方法。
是否有一种解决方法允许PyTables中的表具有未知(但固定)的大小?
最后,为了避免XY problem条评论,我想我可能会使用数组或可扩展数组来做我正在尝试做的事情(这是输出解决方案数据到磁盘)。我仍然很想知道上述问题的答案。
**他们在PyTables文档中被称为属性,但写>>> subclass.attrib
会返回AttributeError: type object 'subclass' has no attribute 'attrib'
,所以我不知道这是否是正确的单词
答案 0 :(得分:1)
使用字典来定义表而不是子类化IsDescription
。
import tables
import numpy as np
param = 10
with tables.open_file('save.hdf','w') as saveFile:
tabledef = {'var1':tables.Float64Col(shape=(param))}
table = saveFile.create_table(saveFile.root,'test',tabledef)
tablerow = table.row
tablerow['var1'] = np.array([1,2,3,4,5,6,7,8,9,0])
tablerow.append()
table.flush()
with tables.open_file('save.hdf','r') as sv:
sv.root.test.read()