如何在Python中按名称调用对象的方法?

2021-10-17 14:15:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个小问题: 如果我运行这个:

print(list(globals()))

这是输出:

['__package__', '__loader__', '__doc__', , '__file__', 'b', '__name__', '__builtins__', 'a']

我想尝试一个包含所有这些元素的方法,特别是ab。你知道吗

但这就像:

'a'.run()

所以这根本不起作用。你知道吗

我需要这样的东西:

a.run()
3条回答
网友
1楼 ·

使用字符串作为globals返回的字典的键。结果值将是实际对象。示例:

a = "hello world!"
print globals()["a"].split()

这里,对变量a调用方法split。结果:

['hello', 'world!']
网友
2楼 ·

如果已经知道对象名为a,只需直接访问变量:a.run()。你知道吗

如果您不知道变量名,那么您肯定不知道它是否引用了一个带有run方法的值,因此以这种方式调用它是不安全的。你知道吗

不管你想做什么,几乎肯定有更好的方法。你知道吗

网友
3楼 ·

在这个特殊的例子中,您碰到了迭代dict工作的方式。执行list(some_dict)操作时,会得到some_dict键的列表。碰巧globals()是一个dict,所以你得到了dict的键,全局事物的“名称”。您可以通过一种明显的方式从dict获取list(some_dict.values()),甚至可以通过some_dict.items()同时获取键和值。你知道吗

所以你的例子可以是

for something in globals().items():
    something.run()

一般来说,如果您有一些需要解析的任意名称列表,您可能不想使用这种方法。你知道吗

相关问题