我正在使用 h5py 访问 HDF5 文件并将 h5py 文件对象存储在一个类中。但是我在尝试用一个新的重新分配一个封闭的 h5py 文件实例变量时遇到了一些奇怪的行为:
class MyClass:
def __init__(self, filename):
self.h5file = None
self.filename = filename
def vartest(self):
self.h5file = h5py.File(self.filename, 'r')
print self.h5file
self.h5file.close()
print self.h5file
newh5file = h5py.File(self.filename, 'r')
print newh5file
self.h5file = newh5file
print self.h5file
print newh5file
def main():
filename = sys.argv[1]
mycls = MyClass(filename)
mycls.vartest()
输出:
<HDF5 file "test.h5" (mode r, 92.7M)>
<Closed HDF5 file>
<HDF5 file "test.h5" (mode r, 92.7M)>
<Closed HDF5 file>
<Closed HDF5 file>
尝试使用新打开的 h5py File 对象更新实例变量似乎以某种方式影响了对象的状态,将其关闭。不管 h5py 方面的实现如何,从我对 Python 语言的理解来看,我看不出这种行为有什么意义(即没有重载赋值运算符)。
此示例使用 Python 2.6.5 和 h5py 1.3.0 运行。如果您想尝试此示例但没有 HDF5 文件,您可以将文件访问模式从“r”更改为“a”。