我对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)
Run Code Online (Sandbox Code Playgroud)
我的问题是,我想以这种方式创建几十个对象,并且必须手动创建每个对象,这似乎是非常糟糕的编程.有没有更好的方法来创建具有略微不同属性的多个对象?
我想我想做的是:
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
Run Code Online (Sandbox Code Playgroud)
并创建了5个名为object_1,object_2等的对象
这可能吗?
如果你有名字的对象object_1,object_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)
Run Code Online (Sandbox Code Playgroud)
解决此问题的另一种方法是在词典的帮助下使用更有意义的对象定义。如果您只关心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)
Run Code Online (Sandbox Code Playgroud)
如果您希望某个特定实例执行与其他实例不同的操作,则此解决方案可以简化此操作:
objectDictionary["bar"].DoSomethingElse(variable = cat)
Run Code Online (Sandbox Code Playgroud)