如何在python中将实例变量设置为fileHandle?

时间:2013-07-11 16:44:45

标签: python file instance-variables filehandle

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

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

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

1 个答案:

答案 0 :(得分:2)

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

PEP 343中讨论了with语句和上下文管理器。