我聲明瞭一個類,並且在__init__
方法中,我聲明瞭兩個將與該類的實例關聯的變量。每個聲明的變量都被初始化爲一個NumPy的零數組,後來被其他數據填充。在Python列表中自動包含對象
在某些點上,除了這個__init__
方法之外,我需要循環遍歷包含這些變量(NumPy數組)的每個對象,並將數組值重置爲零。因此,在__init__
方法中,我想將所有這些變量添加到列表中以便稍後迭代。如果我手動這樣做,這是微不足道的。
但是,我需要頻繁地添加和刪除__init__
中聲明的這些變量的一些數量。每次我這樣做,我都不想手動調整列表中包含的變量。
如何創建list
,dict
或其他這些變量的容器,它們自動調整自身,使其包含所有這些被初始化的變量,而不管這些變量的數量是多少?作爲額外的複雜因素,self.container_of_arrays
不得包含來自__init__
的「其他」變量,例如self.array_length
。
我有什麼,在哪裏self.container_of_arrays
當前必須手動如果self.my_variable_three
創建調整:
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的答案提供正確的解決方案。如上所述,可以使用字典或OrderedDict按名稱訪問數組。對於任何人誰願意這樣做的,這裏是我真正的實現代碼:
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