我想定义一个将fileHandle附加到类的类。例如,我可以定义一个具有实例变量的类作为文件处理程序对象,但当该对象最终被解除引用时,这是不安全的。
class CustomLoggingClass(object):
def __init__(self, *args, **kwargs):
self.fileHandle = open("logFile.json", "w+")我怎样才能以一种安全的方式实现它,这样logFile.json才能被正确地关闭呢?
发布于 2013-07-12 02:33:51
可能最简单的做法是使用contextlib.contextmanager装饰器创建一个助手上下文管理器函数,然后将其与with语句结合使用。例如:
class CustomLoggingClass(object):
def __init__(self, *args, **kwargs):
self.fileHandle = open("logFile.json", "w+")
def close(self):
self.fileHandle.close()
import contextlib
@contextlib.contextmanager
def cm_logger():
logger = CustomLoggingClass()
yield logger
logger.close()
if __name__ == '__main__':
with cm_logger as logger:
# do stuff with logger, a CustomLoggingClass instance
passPEP 343中讨论了with语句和上下文管理器。
https://stackoverflow.com/questions/17599032
复制相似问题