У меня есть класс с именем SalesSimulator, у которого есть атрибут с именем common_params
, который является диктатом. Он содержит ключ с именем number_agents
, который указывает на целочисленное значение.
Значения dict имеют значения, которые извлекаются во время процедуры ` init 'из другого файла, называемого SimulatorObjects, который содержит значения по умолчанию, передаваемые в SalesSimulator.
Пользователь класса может проверить этот атрибут и при необходимости изменить значение по умолчанию на собственное предпочтение. Это все работает хорошо. Что я нахожу странным, так это то, что если я создаю один экземпляр класса и устанавливаю новое значение для одного из элементов в атрибуте common_params
, то это значение распространяется на все будущие экземпляры класса.
Например:
ss = SalesSimulator()
print(ss.common_params['number_agents'])
ss.common_params['number_agents'] = 10
print(ss.common_params['number_agents'])
пока все хорошо. Но теперь, если я создаю новый экземпляр класса:
new_ss = SalesSimulator () print (new_ss.common_params ['number_agents'])
Я ожидал, что для нового экземпляра классифицирует значение go обратно в 1, которое является значением по умолчанию, которое вызывается во время конструктора SalesSimulator.
Вот соответствующая часть этого конструктора:
import SimulatorObjects as so #this is my file of default values
class SalesSimulator(object):
def __init__(self):
# some other stuff happens here that is not relevant
# set default parameters
self.common_params = so.common_params
Элемент в файле SimulatorObject выглядит следующим образом:
common_params = {'number_agents': 1,
'other_stuff': [],
'some_factor': 1.4}
Кажется, я могу обойти Задача:
self.common_params = copy.deepcopy(so.common_params)
Это приемлемое решение?