Python - 创建多个对象的巧妙方法?

时间:2012-04-12 15:24:31

标签: python oop object

我对Python很新,我有一个关于创建具有不同属性的多个对象的简洁方法的问题。目前我不得不专门创建这样的每一个:

object1 = MyClass(property=foo,property2=bar)
object1.DoStuff(variable = foobar)

object2 = MyClass(property=foo,property2=bar2)
object2.DoStuff(variable = foobar)

object3 = MyClass(property=foo,property2=bar3)
object3.DoStuff(variable = foobar)

我的问题是我想以这种方式创建几十个对象,并且必须手动创建每个对象,这似乎是非常糟糕的编程。有没有更好的方法来创建具有略微不同属性的多个对象?

我想我想要做的事情是这样的:

list = [prop1, prop2, prop3, prop4, prop5]
while i < len(list)
    object_i = MyClass(property=foo,property2=list[i])
    object_i.DoStuff(variable = foobar)
    i+=1

并创建5个名为object_1,object_2等的对象

这可能吗?

3 个答案:

答案 0 :(得分:9)

如果您的对象具有名称object_1object_2等,并且想要对所有这些对象执行常见操作,则这清楚地表明您应该实际使用列表{{1并使用循环来执行常见操作。

objects

答案 1 :(得分:4)

另一种解决方法可能是在字典的帮助下使用更有意义的对象定义。如果你关心的只是object_1,object_2等,那么Sven Marnach的解决方案效果很好但是如果你的对象后来真的具有个人重要性呢?引用它们将变得不直观,你会很快迷路。这里有一些示例代码可以帮助您解决这个问题:

objectNames = ("foo", "bar", "cat", "mouse")
objectDictionary = {}
for name in objectNames:
    objectDictionary[name] = MyClass(property=foo,property2=bar)

for obj in objectDictionary.itervalues():
    obj.DoStuff(variable = foobar)

如果您希望特定实例执行与其他实例不同的操作,则此解决方案可以轻松实现:

objectDictionary["bar"].DoSomethingElse(variable = cat)

答案 2 :(得分:2)

使用元组解包和列表推导。

object_1, object_2, ... = [MyClass(property=foo, property2=x) for x in (bar,
  bar2, ...)]