1

我有一个文件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 无法解决它)。

基本上,我想知道是否有更好的方法来做到这一点!

4

1 回答 1

3

您的问题是否与功能请求有关,尤其是与评论有关?

仅供参考:在 Hydra 1.1 中,实例化完全支持位置参数,因此我认为您应该能够functools.partial直接调用而无需重新定义它。

于 2021-04-28T00:49:41.690 回答