设置实例的类属性将其设置为所有实例

时间:2020-01-30 11:35:02

标签: python class attributes

我有一个名为SalesSimulator的类,该类具有一个称为dict的属性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() 打印(new_ss.common_params ['number_agents'])

我期望对于该类的新实例,该值将回到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)

这是可以接受的解决方案吗?

0 个答案:

没有答案