2013-07-11 72 views
1

我想定义一个将fileHandle附加到类的类。例如,我可以定义一个带有实例变量的类作为文件处理程序对象,但当对象最终被解除引用时,它是不安全的。如何在python中将实例变量设置为fileHandle?

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

我该如何以安全的方式执行此操作,以便logFile.json能够正确关闭?

+1

什么时候需要关闭此文件?当这个对象被破坏时,这个对象是 – user2357112

+0

。例如,我想将此类的实例作为属性添加到需要日志记录的任何类中。不使用已经存在的日志记录库的原因是我想将它实现为管理员控制台的json格式。 – user1876508

回答

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 

with声明和上下文管理者在PEP 343讨论。

相关问题