web-dev-qa-db-ja.com

Pythonのループで複数のクラスオブジェクトを作成する方法は?

Pythonで10個のクラスオブジェクトを作成し、それらを使用して何かを行う必要があるとします。

obj_1 = MyClass()
other_object.add(obj_1)
obj_2 = MyClass()
other_object.add(obj_2)
.
.
.
obj_10 = MyClass()
other_object.add(obj_10)

ループでどのように行い、各オブジェクトに変数を割り当てますか(obj_1)、コードが短くなるように?各オブジェクトはループ外でアクセス可能でなければなりません

obj_1.do_sth()
19
alwbtc

この質問は、いくつかのバリエーションで毎日尋ねられます。答えは次のとおりです。変数名からデータを除外し、 これは必須のブログ投稿です

この場合、オブジェクトのリストを作成してみませんか?

objs = [MyClass() for i in range(10)]
for obj in objs:
    other_object.add(obj)

objs[0].do_sth()
27
RemcoGerlich

リストを使用して定義できます。

objs = list()
for i in range(10):
    objs.append(MyClass())
10
Bardia Heydari

前述のように辞書を作成しますが、この場合、各キーには作成するオブジェクト名の名前があります。次に、値をインスタンス化するクラスとして設定します。例:

class MyClass:
   def __init__(self, name):
       self.name = name
       self.checkme = 'awesome {}'.format(self.name)
...

instanceNames = ['red', 'green', 'blue']

# Here you use the dictionary
holder = {name: MyClass(name=name) for name in instanceNames}

次に、ホルダーキーを呼び出すだけで、クラスのすべてのプロパティとメソッドを使用できます。

holder['red'].checkme

出力:

'awesome red'
5
Jobel

これがあなたが探しているものであることを願っています。

class Try:
    def do_somthing(self):
        print 'Hello'

if __name__ == '__main__':
    obj_list = []
    for obj in range(10):
        obj = Try()
        obj_list.append(obj)

    obj_list[0].do_somthing()

出力:

Hello
1
Tanveer Alam