我有一个类,封装了一些我需要的文件处理功能。另一个类创建了一个
这是处理程序的相关部分。整个类的目的是抽象出与底层文件对象的操作细节,并避免不必要地将整个文件读入内存中。然而,处理底层文件的一部分是在对象超出作用域时关闭它。
调用者不应该知道或关心filehandler中涉及的细节。当对象超出作用域时,filehandler的工作是释放任何必要的资源。这也是它首先被抽象化的原因之一。所以,我似乎面临着将filehandler代码移入调用对象,或处理一个有泄漏的抽象的问题。
你有什么想法?
filehandler
实例,并在不确定的时间内使用它。最终,caller
被销毁,这也销毁了对filehandler
的唯一引用。如何最好地让filehandler
关闭文件?我目前使用__del__(self)
,但在看了several different questions and articles之后,我认为这被认为是a bad thing。class fileHandler:
def __init__(self, dbf):
self.logger = logging.getLogger('fileHandler')
self.thefile = open(dbf, 'rb')
def __del__(self):
self.thefile.close()
这是处理程序的相关部分。整个类的目的是抽象出与底层文件对象的操作细节,并避免不必要地将整个文件读入内存中。然而,处理底层文件的一部分是在对象超出作用域时关闭它。
调用者不应该知道或关心filehandler中涉及的细节。当对象超出作用域时,filehandler的工作是释放任何必要的资源。这也是它首先被抽象化的原因之一。所以,我似乎面临着将filehandler代码移入调用对象,或处理一个有泄漏的抽象的问题。
你有什么想法?
.close
,open
和__del__
方法,因为这会使我的示例变得复杂(而且我认为在__enter__
中打开文件是一个很酷的技巧😉),但你可以随时将它们添加回去,然后可以根据需要以合理的方式使用filehandler
。不过,请记住,在使用__del__
时无法保证时间。 - Ethan Furman__exit__
实际上需要另外三个参数(如果发生异常,则为异常信息,否则为三个None),但我不需要它们被命名,因为代码不会有任何不同的操作:可能性1)发生异常--结果->关闭文件;可能性2)未发生异常--结果->关闭文件。 - Ethan Furman