Python 模块级方法上的属性装饰器

Python 模块级方法上的属性装饰器,python,Python,在库/模块中,我想提供几个全局范围的实例,例如 从my_模块导入foo,bar #对foo做些什么,它是MyData类型的实例,是@dataclass #对bar执行一些操作,它是MyData类型的另一个实例 这可以通过在my_module.py中实例化它们来轻松解决。然而,foo和bar是由一个时间昂贵的方法实例化的,因此我们不能等待它们都在全局范围内实例化 (此外,它们很少同时使用,即用户通常想要foo和bar中的任何一个,并且不会接受等待两者加载……实际上foo和bar还有其他兄弟姐妹…

在库/模块中,我想提供几个全局范围的实例,例如

从my_模块导入foo,bar
#对foo做些什么,它是MyData类型的实例,是@dataclass
#对bar执行一些操作,它是MyData类型的另一个实例
这可以通过在my_module.py中实例化它们来轻松解决。然而,foo和bar是由一个时间昂贵的方法实例化的,因此我们不能等待它们都在全局范围内实例化

(此外,它们很少同时使用,即用户通常想要foo和bar中的任何一个,并且不会接受等待两者加载……实际上foo和bar还有其他兄弟姐妹……)

因此,一个幼稚的my_module.py非常耗时,它看起来如下所示:

def my_函数(某些_参数):
#在这里做一些沉重的事情
返回MyData(…)
foo=my_函数(1)
bar=my_函数(2)
然后,我研究了在运行时对它们进行初始化,并在类方法(my_module.py)上利用@property decorator:

def my_函数(某些_参数):
返回MyData(…)
类访问器:
定义初始化(自):
self.\u cache=dict()
def_get(一些参数):
如果某个参数不在self.\u缓存中:
self.\u cache[某些参数]=我的函数(某些参数)
返回self.\u缓存[某些参数]
@财产
def foo(self):
返回自我。\u获取(1)
@财产
def bar(自):
返回自我。\u获取(2)
_访问器=访问器()
然后我几乎可以实现我想要的:

从我的模块导入\u访问器
#使用_accessor.foo执行某些操作
#使用_accessor.bar执行某些操作
但这仍然不是我想要的用户友好性。有没有办法做一些类似于@property decorator的事情,但是在模块级别