使用不同变量在循环中创建实例

时间:2012-05-20 14:06:27

标签: python

我想在循环中创建类实例。所有实例都需要被赋予不同的变量。这些变量可以是一系列字母,如[a,b,c]。

class MyClass(object):
    pass

for i in something:
    #create an instance

如果循环变为3次,我希望循环做出类似的东西:

a = MyClass()
b = MyClass()
c = MyClass()

有办法吗?

6 个答案:

答案 0 :(得分:8)

使用自变量名这种方式有点奇怪;如上所示,使用字典或列表似乎更好。

将它拆分到中间,怎么样

a,b,c = (MyClass() for _ in range(3))

答案 1 :(得分:2)

您可以使用exec执行此操作。另请参阅Modifying locals in Python

>>> class Foo(object): pass
... 
>>> for name in "abc":
...     exec "{0} = Foo()".format(name)
... 
>>> a
<__main__.Foo object at 0x10046a310>
>>> b
<__main__.Foo object at 0x10046a390>
>>> c
<__main__.Foo object at 0x10046a3d0>

答案 2 :(得分:1)

您可以创建一个包含所有实例的列表。例如:

instances = [MyClass() for i in range(0, N)]

答案 3 :(得分:1)

您可以拥有要为对象命名的名称列表,然后在循环中,在创建和命名对象时将名称添加到全局名称空间。

list_of_names = ['a', 'b', 'c', 'd']
for name in list_of_names:
    globals()[name] = your_object()

这里的人肯定会说这是一种不好的编码方式而没有给出任何有说服力的理由,但它直接解决了你的问题而没有任何进一步的清单或字典。

答案 4 :(得分:0)

不容易,做这样的事情通常是个坏主意;别人可以详细说明原因,因为我不太清楚。

你可能会做的是

class MyClass(object):
    pass

list_of_insts = []
for i in something:
    #create an instance
    lists_of_insts.append(MyClass())

然后您可以在该列表中引用每个位置:lists_of_insts[0]。您也可以将它们分配到dict而不是列表,以便于访问。

答案 5 :(得分:0)

如何将这些变量存储在dict中?像

variables = {}
varnames = ['a', 'b', 'c']
for i, something in enumerate(things):
    variables[varnames[i]] = MyClass()