我想在循环中创建类实例。所有实例都需要分配给不同的变量。这些变量可以是一系列字母,例如 [a,b,c]。
class MyClass(object):
pass
for i in something:
#create an instance
如果循环转了 3 次,我希望循环做出这样的事情:
a = MyClass()
b = MyClass()
c = MyClass()
有没有办法做到这一点?
我想在循环中创建类实例。所有实例都需要分配给不同的变量。这些变量可以是一系列字母,例如 [a,b,c]。
class MyClass(object):
pass
for i in something:
#create an instance
如果循环转了 3 次,我希望循环做出这样的事情:
a = MyClass()
b = MyClass()
c = MyClass()
有没有办法做到这一点?
以这种方式使用自变量名称有点奇怪。如上所示,使用字典或列表似乎更好。
把它从中间分开,怎么样
a,b,c = (MyClass() for _ in range(3))
您可以使用exec
. 另请参阅在 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>
您可以创建一个包含所有实例的列表。例如:
instances = [MyClass() for i in range(0, N)]
不容易,做这样的事情通常是个坏主意。其他人可以详细说明原因,因为我不太清楚。
你可能会做的是
class MyClass(object):
pass
list_of_insts = []
for i in something:
#create an instance
lists_of_insts.append(MyClass())
然后您可以在该列表中按位置引用每个:lists_of_insts[0]
. 您还可以将它们分配给 adict
而不是列表,以便于访问。
您可以有一个要命名对象的名称列表,然后在循环中,在创建和命名对象时将名称添加到全局命名空间。
list_of_names = ['a', 'b', 'c', 'd']
for name in list_of_names:
globals()[name] = your_object()
这里的人肯定会说这是一种不好的编码方式,没有给出任何令人信服的理由,但它直接解决了你的问题,没有任何进一步的列表或字典。
将这些变量存储在字典中怎么样?像
variables = {}
varnames = ['a', 'b', 'c']
for i, something in enumerate(things):
variables[varnames[i]] = MyClass()