作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想定义一个将 fileHandle 附加到类的类。例如,我可以定义一个带有实例变量的类作为文件处理程序对象,但当该对象最终被取消引用时,它是不安全的。
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
语句和上下文管理器在 PEP 343 中讨论。 .
关于python - 如何在 python 中将实例变量设置为 fileHandle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17599032/
我是一名优秀的程序员,十分优秀!