Шалом.
Как известно, __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")


