4

ループ内にクラスインスタンスを作成しようとしています。すべてのインスタンスを別の変数に割り当てる必要があります。これらの変数は、[a、b、c]のような文字のシーケンスにすることができます。

class MyClass(object):
    pass

for i in something:
    #create an instance

ループが3回回転する場合、ループに次のようなものを作成させます。

a = MyClass()
b = MyClass()
c = MyClass()

それを行う方法はありますか?

4

6 に答える 6

9

このように独立変数名を使用するのは少し奇妙です。上記のように、辞書またはリストのいずれかを使用する方が良いようです。

真ん中で割って、どう?

a,b,c = (MyClass() for _ in range(3))
于 2012-05-20T14:30:16.823 に答える
2

を使用してこれを行うことができますexecPython でのローカルの変更も参照してください。

>>> class Foo(object): pass
... 
>>> for name in "abc":
...     exec "{0} = Foo()".format(name)
... 
>>> a
<__main__.Foo object at 0x10046a310>
>>> b
<__main__.Foo object at 0x10046a390>
>>> c
<__main__.Foo object at 0x10046a3d0>
于 2012-05-20T14:12:06.217 に答える
1

すべてのインスタンスを保持するリストを作成できます。例えば:

instances = [MyClass() for i in range(0, N)]
于 2012-05-20T14:12:04.333 に答える
1

簡単ではありませんが、そのようなことをするのは一般的に悪い考えです。私にははっきりしないので、他の誰かが理由を詳しく説明できます。

代わりにできることは

class MyClass(object):
    pass

list_of_insts = []
for i in something:
    #create an instance
    lists_of_insts.append(MyClass())

次に、そのリスト内でそれぞれを位置的に参照できます: lists_of_insts[0]. dict簡単にアクセスできるように、リストの代わりにそれらを割り当てることもできます。

于 2012-05-20T14:12:10.903 に答える
1

オブジェクトに名前を付けたい名前のリストを作成し、ループ内でオブジェクトを作成して名前を付けるときに名前をグローバル名前空間に追加できます。

list_of_names = ['a', 'b', 'c', 'd']
for name in list_of_names:
    globals()[name] = your_object()

ここにいる人々は、説得力のある理由を示さずにこれをコーディングするのは悪い方法だと間違いなく言うでしょうが、それ以上のリストや口述なしで問題を直接解決します。

于 2012-05-20T14:12:40.740 に答える
0

これらの変数をdictに格納するのはどうですか? お気に入り

variables = {}
varnames = ['a', 'b', 'c']
for i, something in enumerate(things):
    variables[varnames[i]] = MyClass()
于 2012-05-20T14:12:12.590 に答える