如何在python中将实例变量设置为文件句柄?

如何在python中将实例变量设置为文件句柄?,python,file,instance-variables,filehandle,Python,File,Instance Variables,Filehandle,我想定义一个将文件句柄附加到类的类。例如,我可以将一个带有实例变量的类定义为文件处理程序对象,但当该对象最终被取消引用时,它是不安全的 class CustomLoggingClass(object): def __init__(self, *args, **kwargs): self.fileHandle = open("logFile.json", "w+") 如何以安全的方式实现这一点,以便正确关闭logFile.json?最简单的方法可能是使用contextli

我想定义一个将文件句柄附加到类的类。例如,我可以将一个带有实例变量的类定义为文件处理程序对象,但当该对象最终被取消引用时,它是不安全的

class CustomLoggingClass(object):
    def __init__(self, *args, **kwargs):
        self.fileHandle = open("logFile.json", "w+")

如何以安全的方式实现这一点,以便正确关闭logFile.json?

最简单的方法可能是使用
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
        pass

with
语句和上下文管理器在中讨论。

何时需要关闭此文件?何时销毁此对象。例如,我想将这个类的一个实例作为属性添加到任何需要日志记录的类中。不使用现有日志库的原因是,我想将其实现为管理员控制台的json格式。