Вот пример того, как вы можете хранить все внутри словаря и по-прежнему ссылаться на массивы как на атрибуты, а также вызывать функции для массивов по имени:
import numpy as np
class Data_Read:
def __init__(self, monthly_shape=(200, 200, 40)): #3D data
months = [
"jan",
"feb",
"march",
"april",
"may",
"june",
"july",
"august",
"sept",
"oct",
"nov",
"dec"
]
self._months = {month: np.zeros(monthly_shape) for month in months}
def detrend(self, month):
# this is a dummy function that just increments
return self._months[month] + 1
def __getattr__(self, name):
if name in self._months:
return self._months[name]
return super().__getattr__(name)
air_temp = Data_Read()
print(air_temp.jan.shape) # (200, 200, 40)
print((air_temp.detrend("jan") == 1).all()) # True
Вы также можете достичь того же результата, используя setattr
и getattr
, потому что атрибуты просто сохраняются в словаре объекта в любом случае:
import numpy as np
class Data_Read:
def __init__(self, monthly_shape=(200, 200, 40)): #3D data
months = [
"jan",
"feb",
"march",
"april",
"may",
"june",
"july",
"august",
"sept",
"oct",
"nov",
"dec"
]
for month in months:
setattr(self, month, np.zeros(monthly_shape))
def detrend(self, month):
# this is a dummy function that just increments
return getattr(self, month) + 1