Tôi có một lớp mở tệp để ghi. Trong destructor của tôi, tôi gọi hàm đó đóng file:del MyClass không gọi đối tượng .__ del __()
class MyClass:
def __del__(self):
self.close()
def close(self):
if self.__fileHandle__ is not None:
self.__fileHandle__.close()
nhưng khi tôi xóa các đối tượng với các mã như:
myobj = MyClass()
myobj.open()
del myobj
nếu tôi cố gắng reinstantiate đối tượng, tôi nhận được một lỗi giá trị :
ValueError: The file 'filename' is already opened. Please close it before reopening in write mode.
trong khi nếu tôi gọi myobj.close()
trước del myobj
Tôi không gặp sự cố này. Vậy tại sao không phải là __del__()
được gọi?
Hãy thử kế thừa từ 'đối tượng' - không làm như vậy đã được coi là phong cách lỗi thời trong khoảng sáu năm. – Marcin
Bạn nên hiển thị thêm một số mã. Làm thế nào có thể cho bạn biết làm thế nào 'myobj.close()' thay đổi mọi thứ, mà không biết nó làm gì? – ugoren
Hãy nhớ rằng 'del' không gọi' __del__'. Nó chỉ xóa một trong các tham chiếu. Nói chung tốt hơn là đóng một cách rõ ràng, có thể sử dụng giao thức quản lý ngữ cảnh (câu lệnh 'with'). – yak