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

时间:2013-09-18 17:35:20

标签: python

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

print(list(globals()))

这是输出:

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

我想尝试一种包含所有这些元素的方法,尤其是ab

但这就像是:

'a'.run()

所以这根本不起作用。

我需要类似的东西:

a.run()

3 个答案:

答案 0 :(得分:2)

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

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

此处,方法split在变量a上调用。结果:

['hello', 'world!']

答案 1 :(得分:1)

如果您已经知道该对象被称为a,则只需直接访问该变量:a.run()

如果您不知道变量名称,那么您肯定不知道它是否引用了run方法的值,因此尝试以这种方式调用它是远非安全的。

无论你想做什么,几乎肯定有更好的方法。

答案 2 :(得分:0)

在这种特殊情况下,你正在对dict的工作进行迭代。执行list(some_dict)后,您会获得some_dict列表。碰巧globals()是一个字典,所以你得到了那个字典的键,即全局事物的“名字”。您可以以明显的方式从字典中获取list(some_dict.values()),您甚至可以同时获得密钥和值some_dict.items()

所以你的例子可能是

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

更一般地说,如果您需要解决一些任意名称列表,您可能不希望使用这种方法。