Python - 创建多个对象的简洁方法?

5

我是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等的对象,是否可以实现?


2
你尝试过使用字典吗? - jamylak
2
你应该将数据(包括索引)从变量名中剔除。 - Sven Marnach
@vartec 不,我已经过了作业阶段...只是对编程新手! - FakeDIY
3个回答

12
如果你有一些名为object_1object_2等的对象,并且希望对所有这些对象执行相同的操作,那么这清楚地表明你应该实际上使用一个列表objects,并使用循环来执行这些共同的操作。
props = <some list here>
objects = [MyClass(property=foo, property2=prop) for prop in props]
for obj in objects:
    obj.do_stuff(variable=foobar)

谢谢。当你看到它时,它似乎非常明显! :-) - FakeDIY

6
另一种方法是使用字典来定义更有意义的对象。如果您只关心 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
使用元组解包和列表推导式。
object_1, object_2, ... = [MyClass(property=foo, property2=x) for x in (bar,
  bar2, ...)]

谢谢。那很有道理。那你怎么做object_1.DoStuff,object_2.DoStuff等等呢? - FakeDIY
1
当然可以。但是如果你要对每个对象都这样做,那么你应该像Sven所说的那样将它们放入列表中 - Ignacio Vazquez-Abrams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接