【发布时间】:2021-09-12 12:24:42
【问题描述】:
我需要一种将全局变量的初始化推迟到第一次访问它的方法,总体思路用以下 Python 伪代码表示:
FOO = bar
FOO.some_method_on_bar() # Init bar: bar = Bar(); bar.some_method_on_bar()
FOO.some_method_on_bar() # Use cached bar: bar.some_method_on_bar()
到目前为止,我正在考虑以某种方式告诉 Python 在每次评估其实例时调用一个特殊的类方法,但我似乎无法用谷歌搜索它:
class LazyGetter:
def __init__(self, get_value) -> None:
self.get_value = get_value
def __class__instance__access__(self):
return self.get_value()
FOO = LazyGetter(get_value=lambda: Bar())
FOO # = LazyGetter.__class__instance__access__()
FOO.some_method_on_bar() # = LazyGetter.__class__instance__access__().some_method_on_bar()
所以,基本上我需要知道是否有与 makeup __class__instance__access__ 方法等效的东西。
【问题讨论】:
-
一个考虑因素是这将使使用全局变量的代码很难进行单元测试
标签: python