私はクラスを宣言していますが、__init__
メソッドでは、そのクラスのインスタンスに関連付けられる2つの変数を宣言しています。宣言された各変数は、NumPyの0の配列として初期化され、後で他のデータで埋められます。Pythonリスト内のオブジェクトの自動包含
この__init__
メソッドの外では、これらの変数(NumPy配列)のそれぞれを含むオブジェクトをループし、それぞれの配列値をゼロにリセットする必要があります。したがって、__init__
メソッドでは、これらの変数をすべてリストに追加して、後で反復処理したいと考えています。一度手動で行うと、それは簡単です。
しかし、私は頻繁に追加し、これらの変数のいくつかを削除する必要があります__init__
で宣言されている。私がそれをするたびに、リストに含まれている変数を手動で調整する必要はありません。
list
、dict
、またはこれらの変数の数にかかわらず、これらの変数が初期化されるように自動的に調整されるこれらの変数のコンテナを作成するにはどうすればよいですか?さらに複雑な問題として、self.container_of_arrays
には、の「その他」の変数(例えば、self.array_length
)を含めてはいけません。 self.my_variable_three
が作成されている場合self.container_of_arrays
は現在、手動で調整する必要があります私が持っているもの
、:
class generic_class():
def __init__(self, array_width_one, array_width_two):
self.array_length = some_integer
self.my_variable_one = numpy.zeros((self.array_length, array_width_one), dtype=float)
self.my_variable_two = numpy.zeros((self.array_length, array_width_two), dtype=float)
self.container_of_arrays = [self.my_variable_one, self.my_variable_two]
非常に彼らはその中に含まれている開始からのように、私は、dict
以内に私の変数を宣言しようとしたdict
これは、未定義の変数への参照が存在することにつながります。例えば。
self.container_of_arrays = OrderedDict([(self.my_variable_one, numpy.zeros((self.array_length, array_width_one), dtype=float)),
(self.my_variable_two, numpy.zeros((self.array_length, array_width_two), dtype=float))
])
更新:
XLIの答えは正しいソリューションを提供します。提案されているように、dictまたはOrderedDictを使って名前で配列にアクセスすることができます。そうしたい人のために、ここで私が実際に実装したコードです:代わりに、各numpyの配列のための変数を作成する
my_data = [('variable_one_name', len(variable_one_data)),
('variable_two_name', len(variable_two_data)),
] # Intentionally outside the class in a location where variables are added by the user
class generic_class():
def __init__(self, array_length, my_data):
self.container_of_arrays = OrderedDict((variable_name, numerix.zeros((array_length, array_width), dtype=float))
for variable_name, array_width in my_data)
これらの配列を属性名で参照する必要がありますか? 'my_variable_one'か、単にコンテナ' container_of_arrays [1] 'にインデックスを付けることができます。これはリストなので、簡単に新しい項目を追加して削除することができます。 – hpaulj