如何使类实例不共享字典

时间:2015-02-11 07:42:28

标签: python class dictionary instance

实例化类时,我遇到了可变对象的问题。 我不能让它工作(没有循环__init__函数中的dict键)。

我意识到这个问题与这里描述的内容有关但我无法找到解决方法。 [http://effbot.org/zone/default-values.htm]

entity_type1 = {'parameter1': 'on', 'parameter2': 1}
default_settings = {'entity_type1': entity_type1}
class Settings(object):

    def __init__(self, entity_type, defaults=None):    
        self.entity_type = entity_type
        self.store = defaults
        self.defaults = self.store

    def set(self,type_dict):
        self.store=type_dict

    def __getitem__(self, key):
        return self.store[key]

    def __setitem__(self, key, value):
        self.store[key] = value

    def __str__(self):
        ans = "\n--- %s ---\n" % self.entity_type
        max_l=max([len(k) for k in self.store.keys()])
        for k in self.store.keys():
            ans += ("%s:" % k).ljust(max_l+2)
            ans += "%s\n" % str(self.store[k])
        return ans

settings1=Settings('entity_type1')
settings2=Settings('entity_type1')
settings1.set(default_settings['entity_type1'])
settings2.set(default_settings['entity_type1'])
print settings1

#--- entity_type1 ---
#parameter1: on
#parameter2: 1
print settings2

#--- entity_type1 ---
#parameter1: on
#parameter2: 1

settings1['parameter2']="VALUE_ASSIGNED_TO_SETTINGS1"
print 'settings1', settings1
print 'settings2', settings2

#settings1
#--- entity_type1 ---
#parameter1: on
#parameter2: VALUE_ASSIGNED_TO_SETTINGS1
#
#settings2
#--- entity_type1 ---
#parameter1: on
#parameter2: VALUE_ASSIGNED_TO_SETTINGS1

print 'settings1 is settings2:', settings1 is settings2
print 'settings1.store is settings2.store:', settings1.store is settings2.store

#settings1 is settings2: False
#settings1._store is settings2._store: True

有关如何以正确方式执行此操作的任何提示,并使实例不共享商店词典?

0 个答案:

没有答案
相关问题