Igo*_*eev 5 python properties decorator contextmanager pandas
我想以这样的方式定义一个属性,无论何时调用它,它都是在上下文管理器中完成的。说吧,我从以下开始:
@property
def hangar(self):
return self._hangar
Run Code Online (Sandbox Code Playgroud)
每当写下代码时,我都会写:
res = some_function(self.hangar)
Run Code Online (Sandbox Code Playgroud)
我希望它被评价为:
with pandas.HDFStore(...) as hangar:
some_function(self.hangar)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
正如您从评论中看到的,您需要的是上下文管理器通常的工作方式“由内而外”。
但这并不能阻止您使函数调用/属性检索“由内而外”完全相同:您所需要的只是不使用“属性”调用所需的方法,而是将目标函数作为参数传递。
沿着这个:
def context_property(method):
def wrapper(self, target, *args, **kw):
path = method(self)
with pandads.HDFStore(path) as context:
result = target(context, *args, **kw)
return result
return wrapper
class MyClass:
@context_property
def hangar(self):
return "path_to_hdfstore"
def do_stuff(self):
...
value = self.hangar(some_function)
...
Run Code Online (Sandbox Code Playgroud)
并将some_function在上下文管理器内运行。如果您需要使上下文管理器本身通用,而不总是“pandas.HDFStore”,您可以在装饰器上多放一层来配置它。
| 归档时间: |
|
| 查看次数: |
1862 次 |
| 最近记录: |