【发布时间】:2018-07-06 07:21:18
【问题描述】:
我想以这样一种方式定义一个属性,即无论何时调用它,它都会在上下文管理器中完成。说,我从:
@property
def hangar(self):
return self._hangar
每当我写下代码时:
res = some_function(self.hangar)
我希望它被评估为:
with pandas.HDFStore(...) as hangar:
some_function(self.hangar)
有什么想法吗?
【问题讨论】:
-
嗯,
res最终会成为什么?你不能把上下文管理器代码放在 getter 定义中吗?我不确定我是否理解你想要什么。 -
@juanpa.arrivillaga
res是某个函数在hangar上运行的结果,但是hangar需要在函数被调用之前打开并在之后立即关闭。 -
您不能使用
property来做您想做的事情,因为getter 方法将在some_function被调用之前完成运行。充其量你可以包装保持上下文活动的对象,直到它被垃圾收集,但确切的时间将非常不确定(它可能比你想要的存活时间更长)。如果您使用上下文管理器来确保清理某些内容,则应该明确并在适当的位置实际写出with语句。 -
@Blckknght 谢谢!我很害怕。
标签: python pandas properties decorator contextmanager