【发布时间】:2017-12-31 22:20:17
【问题描述】:
是否有我可以覆盖的类属性以使类的实例在它退出 with 语句的范围之前执行某些操作?
例如,我们可以确保在完成文件句柄后关闭它:
with open(PATH, 'wb') as f:
f.write("SOME TEXT")
如果我编写了一个需要编写器在该类的生命周期内持续存在的类,如下所示:
class MyWriter(object):
def __init__(self, path):
self.f = open(path, 'wb')
self.buffer = ''
def write(self, text):
self.buffer += text
# Just a toy example, naively relying on file system
# page cache should outperform this
if len(self.buffer) >= 4096:
self.flush()
def flush(self):
f.write(self.buffer)
self.buffer = ''
def close(self):
self.flush()
self.f.close()
然后我想在退出with 的范围之前强制调用.close() 并刷新:
with MyWriter(PATH) as mw:
mw.write("SOME TEXT")
【问题讨论】:
标签: python class with-statement