如何调用对象';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在这个答案中给你的方法。请重新阅读答案,理解它,并在注销之前尝试应用它。