我正在尝试通过dir()提取类名,并通过for循环中的变量名动态创建它们的实例。如何让python将'item'解释为变量名而不是'不存在'的类名。
>>> class cls1():
... def __init__(self):
... self.speak = 'say cls1'
... def replay(self):
... print self.speak
...
>>> for item in dir():
... if item[:2] != '__':
... print 'item = ', item
... x = item()
... x.reply()
...
item = cls1
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
TypeError: 'str' object is not callable
答案 0 :(得分:0)
dir()
生成一个已排序的名称列表;这些只是字符串。它们不是对实际对象的引用。您无法对字符串应用调用。
使用globals()
dictionary代替,这会为您提供包含名称和实际对象的映射:
for name, obj in globals().items():
if not name.startswith('__'):
print "name =", name
instance = obj()
instance.replay()
模块级别的 dir()
,没有参数,基本上返回sorted(globals())
。