我有一个文件functional.py
,它定义了许多有用的功能。对于每个函数,我想创建一个别名,当调用它时会引用一个函数。像这样的东西:
foo/functional.py
def fun1(a):
return a
def fun2(a):
return a+1
...
foo/__init__.py
from inspect import getmembers, isfunction
from . import functional
for (name, fun) in getmembers(functional, isfunction):
dun = lambda f=fun: f
globals()[name] = dun
>> bar.fun1()(1)
>> 1
>> bar.fun2()(1)
>> 2
我可以通过functional.py
使用inspect
和动态定义一组适合我目的的新函数来获取这些函数。
但为什么?你可能会问... 我正在使用配置管理器Hydra,其中可以通过指定完全限定名称来实例化对象。我想利用functional.py
配置中的函数,并在创建使用该函数的对象时让 hydra 传递对该函数的引用(更多详细信息可以在Hydra 文档中找到)。
有很多功能,我不想把它们都写出来……人们在类似的问题globals()
中指出,为此目的进行修改是不好的做法。我的用例受到了相当大的限制——文档方面有一个一对一的映射(但显然 IDE 无法解决它)。
基本上,我想知道是否有更好的方法来做到这一点!