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

そして、これでobject_1、object_2などの名前の5つのオブジェクトを作成します

これは可能ですか?

4

3 に答える 3

12

などの名前のオブジェクトがありobject_1object_2これらすべてのオブジェクトに対して共通の操作を実行したい場合は、実際には listobjectsを使用し、ループを使用して共通の操作を実行する必要があることを明確に示しています。

props = <some list here>
objects = [MyClass(property=foo, property2=prop) for prop in props]
for obj in objects:
    obj.do_stuff(variable=foobar)
于 2012-04-12T15:29:53.557 に答える
6

これを行う別の方法は、辞書を使用してより意味のあるオブジェクト定義を使用することです。Sven Marnach のソリューションは、object_1、object_2 などだけを気にする場合はうまく機能しますが、後でオブジェクトが実際に個々の重要性を持つ場合はどうでしょうか? それらを参照することは直感的ではなくなり、すぐに迷子になります。この点で役立つサンプルコードを次に示します。

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)
于 2012-04-12T15:45:20.497 に答える
2

リスト内包表記とともにタプルのアンパックを使用します。

object_1, object_2, ... = [MyClass(property=foo, property2=x) for x in (bar,
  bar2, ...)]
于 2012-04-12T15:27:14.790 に答える