Шалом.
Как известно, __init__ не возвращает ничего, кроме None, поэтому использую __new__, дабы возвращать при инициализации экземпляра _io.TextIOWrapper. После отработки сборщик мусора почему-то не закрывает файл, даже при явно прописанном del myfile.
class file:
def __new__(self, filename):
self.openfile = open(filename, 'r')
return self.openfile
def __del__(self):
print('File', filename, ' closes.')
self.openfile.close()
def read(filename):
for filestr in filename:
print(filestr)
myfile = file(r'/etc/rc.conf')
print(type(myfile))
file.read(myfile)
del myfile
Подскажите, пожалуйста, почему так происходит? Есть другой пример с __init__, в котором всё отрабатывает как надо:
# class
class Awesome:
# the init method
def __init__(self, filename):
print("Inside the __init__ method.")
# open file
self.fobj = open(filename, "w")
# method
def writeContent(self, data):
print("Inside the writeContent method.")
# write the data
self.fobj.write(data)
# the del method
def __del__(self):
print("Inside the __del__ method.")
# close file
self.fobj.close()
# object
obj = Awesome("helloworld.txt")
obj.writeContent("Hello World")