我正在使用 getattr 在运行时调用函数。有许多功能,它们存在于几个单独的文件中。我目前正在通过以下方式执行此操作:
假设函数存在于 PACKAGE/functions_*.py
实际调用是在类方法中完成的:
class SomeClass(object):
...
def call(self, **kwargs):
function_name = '{}_{}'.format(self.parms['prefix'], self.parms['name'])
file_name = self.parms['prefix']
mod_name = 'PACKAGE.{}'.format(file_name)
module = __import__(mod_name, globals(), locals(), [file_name,])
return getattr(module, function_name)(**kwargs)
上面的代码工作正常,但对我来说似乎过于复杂,而且看起来每次调用此方法时都必须打开 PACKAGE/function_*.py 文件(因为它没有导入语句)。
因为这个方法被执行了数千次,我不希望代码不必要地低效。
问题:有没有更好/更有效的方法来做到这一点?还是我对重复打开文件效率低下的担忧毫无根据?
注意:首先导入所有 PACKAGE.function_x.py 文件(没有很多)对我来说似乎更干净,但后来我不知道如何使用 getattr(模块)对象来引用这些导入。