2013-07-11 70 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討論。

相關問題