필요한 파일 처리 기능을 포함하는 클래스가 있습니다. 다른 클래스는 filehandler
의 인스턴스를 만들고이를 불확실한 시간 동안 사용합니다. 결국 caller
이 파괴되어 filehandler
에 대한 유일한 참조가 파괴됩니다.파일 주위의 클래스 래퍼 - 더 이상 참조되지 않을 때 파일 핸들을 닫는 적절한 방법
filehandler
파일을 닫는 가장 좋은 방법은 무엇입니까?
나는 현재 __del__(self)
사용하지만 differentquestionsand articlesseveral을보고 난 후에, 나는 이것이 나쁜 일이 간주됩니다 인상입니다.
class fileHandler:
def __init__(self, dbf):
self.logger = logging.getLogger('fileHandler')
self.thefile = open(dbf, 'rb')
def __del__(self):
self.thefile.close()
그게 핸들러의 관련 비트입니다. 클래스의 요점은 기본 파일 객체 작업에 대한 세부 사항을 추상화하고 파일 전체를 불필요하게 메모리로 읽지 않도록하는 것입니다. 그러나 기본 파일을 처리하는 부분은 객체가 범위를 벗어날 때 객체를 닫는 것입니다.
caller
은 filehandler
에 관련된 세부 사항을 알거나 신경 쓰지 않아야합니다. 범위를 벗어난 경우 필요한 자원을 해제하는 것은 filehandler
님의 작업입니다. 이것이 처음에 추상화 된 이유 중 하나입니다. 그래서 나는 filehandler
코드를 호출 객체로 옮기거나 새는 추상화를 처리하는 것으로 보입니다.
생각하십니까?
()'__enter의 __'에서 파일을 여는 멋진 트릭 - 당신은 또한 파일의 위치를 유지하기 위해 거기에 몇 가지 마술을 할 수 개폐 사이. – kindall
아주 좋아, 이것은 내가 원한 것에 훨씬 가깝다. ref주기가 내가 확인한 첫 번째 것이고, 나는 아무 것도 가지고 있지 않습니다. 그러나 일부 기사에서는 리프주기에 관계없이 리프 객체에 del 메소드가 있으면 전체 객체 체인을 콜백 할 수 없다고 말합니다. –
@SpencerRathbun : 내가 찾을 수 있었던 모든 문서는 ref 사이클이있는 경우에만 항목을 수집 할 수 없다고 말합니다. ** –