在for循环中创建实例

时间:2017-10-21 15:32:25

标签: python instance

我正在尝试通过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

1 个答案:

答案 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())