在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,)*7suggestion,但是它仅适用于不可变的基本类型(数字,字符串,元组等)。如果用于用户类,它将所有名称分配给同一对象。

我主要是出于好奇而问,尽管有时我确实需要此作为测试代码。我已经进行了广泛的搜索,还没有找到确切的答案。

最佳答案

如果您需要许多类似的变量,则可以使用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)

07-25 23:37
查看更多