python - 使用动态字符串变量调用 Python 函数
问题描述
我正在尝试创建一个动态方法执行器,其中我有一个始终包含两个元素的列表。第一个元素是文件名,第二个元素是要执行的方法的名称。
我怎样才能做到这一点?
不幸的是,我下面的代码不起作用,但它可以很好地说明我想要实现的目标。
from logic.intents import CenterCapacity
def method_executor(event):
call_reference = ['CenterCapacity', 'get_capacity']
# process method call
return call_reference[0].call_reference[1]
谢谢!
解决方案
(注意:这个答案假设必要的导入已经发生,你只需要一种机制来调用导入模块的功能。如果你还希望通过一些程序代码来完成导入,我将不得不添加那部分, 使用importlib
库)
你可以这样做:
globals()[call_reference[0]].__dict__[call_reference[1]]()
解释:
globals()
返回全局变量名称与其引用对象之间的映射。导入模块的名称算作当前模块的这些全局变量之一。
索引这个映射对象call_reference[0]
返回包含要调用的函数的模块对象。
模块对象将模块的__dict__
每个属性名称映射到该属性引用的对象。模块中定义的函数也算作模块的属性。
__dict__
因此,使用函数名进行索引会call_reference[1]
返回函数对象。
推荐阅读
- java - 这两个 Java 代码哪个更快?
- android-studio - 如何更改 FlutterLogo 图像
- javascript - 不能使用简单地图?
- angular - 包含公共对话框的组件:MatDialog,在构造函数中无法加载
- php - 调用未定义的函数 mysql_select_db()
- cakephp-2.3 - 如何生成类别树,显示技术详细信息表中的相应评级
- javascript - 如何使用 jquery 在 laravel 中单击下拉菜单中获取 li 的值?
- php - 使代码更小的可能性
- angularjs - 将 angularJS 值发送到 MVC 操作
- angular - 角材料2不起作用