如何调用对象';Python中的按名称排序的方法?

如何调用对象';Python中的按名称排序的方法?,python,Python,我有一个小问题: 如果我运行这个: print(list(globals())) 这是输出: ['__package__', '__loader__', '__doc__', , '__file__', 'b', '__name__', '__builtins__', 'a'] 我想尝试使用所有这些元素的方法,尤其是a和b 但这就像: 'a'.run() 所以这根本不起作用 我需要像这样的东西: a.run() 使用字符串作为globals返回的字典的键。结果值将是实际对象。例如: a

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

print(list(globals()))
这是输出:

['__package__', '__loader__', '__doc__', , '__file__', 'b', '__name__', '__builtins__', 'a']
我想尝试使用所有这些元素的方法,尤其是
a
b

但这就像:

'a'.run()
所以这根本不起作用

我需要像这样的东西:

a.run()

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

a = "hello world!"
print globals()["a"].split()
这里,对变量
a
调用方法
split
。结果:

['hello', 'world!']

在这个特殊的例子中,您碰到了迭代对
dict
工作的影响。当您执行
list(some_dict)
时,您将获得
some_dict
的键列表。碰巧,
globals()
是一个dict,因此您可以得到该dict的键,即全局事物的“名称”。您可以通过一种显而易见的方式从dict中获取值:
列表(一些dict.values())
,您甚至可以通过
一些dict.items()
同时获取键和值

所以你的例子可以是

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

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

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

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


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

对不起,这不是我想要的。我的问题是:b=any_class()正在将globals()调用到一个列表中,而我想运行b是不可能的,因为如果我这样做,它会尝试这样做:“b”。run()@m00lti这不是一个真正的问题。您试图解决的实际问题是什么?@m00lti是的,因此要在
b
上运行某些东西,您需要对实际对象的引用,而不是名称字符串。这就是Kevin在这个答案中给你的方法。请重新阅读答案,理解它,并在注销之前尝试应用它。