h5py를 사용하여 HDF5 파일에 액세스하고 h5py File 개체를 클래스에 저장합니다. 그러나 나는 새와 폐쇄 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 2.6.5 및 h5py 1.3.0으로 실행됩니다. 이 예제를 시도하고 싶지만 주변에 HDF5 파일이 없으면 파일 액세스 모드를 'r'에서 'a'로 변경할 수 있습니다.
'self.h5file = newh5file' 행을 주석 처리하면 "닫힘"으로 인쇄됩니까? 'self.h5file'은 [property] (http://docs.python.org/library/functions.html#property)입니까? 'h5py.File()'은 전역 상태를 유지합니까? – jfs
만약'self.h5file = newh5file'을 주석 처리했다면 흥미롭게도'newh5file'과'self.h5file' (내가 명시 적으로 닫은 것)은''. 이 예제는 독립적인데, self.h5file은 속성이 아닙니다. 'h5py.File()'의 구현에 관해서는 많이 말할 수 없지만, 어떤 전역 상태가 있다면 놀라지 않을 것입니다. 그러나 인스턴스 변수를 할당하는 것이 어떻게 전역 상태를 변경하는지 이해하지 못합니다 (누군가 참조 계산을 어딘가에서하고 있습니까?). –