在Python中,从同一类创建多个对象的最佳实践是什么?例如:
(doc, grumpy, happy, sleepy, bashful, sneezy, dopey) = Dwarf(), Dwarf(), Dwarf(), Dwarf(), Dwarf(), Dwarf(), Dwarf()
这很笨拙。生成器表达式可以缩短它:
(doc, grumpy, happy, sleepy, bashful, sneezy, dopey) = (Dwarf() for i in range(7))
for i in range(7)
位似乎应该没有必要。我已经看到使用... = (object,)*7
的suggestion,但是它仅适用于不可变的基本类型(数字,字符串,元组等)。如果用于用户类,它将所有名称分配给同一对象。我主要是出于好奇而问,尽管有时我确实需要此作为测试代码。我已经进行了广泛的搜索,还没有找到确切的答案。
最佳答案
如果您需要许多类似的变量,则可以使用dict
代替使用新变量向全局命名空间发送垃圾邮件。尝试这个:
dwarf_names = "doc grumpy happy sleepy ...".split():
dwarfs = {name: Dwarf() for name in dwarf_names}
并像
dwarfs["grumpy"].call_the_prince()
而不是grumpy.call_the_prince()
那样使用它们。如果必须创建新变量(我不认为它们应该这样做):
locals().update(dwarfs)
shold可以解决这个问题,但是对于这个简单的问题来说却很难看。
注意:在不存在dict理解的旧Python版本上:
dwarfs = dict((name, Dwarf()) for name in dwarf_names)