0

I have problems with the mutable objects when instantiating a class. I cannot to get it to work (without looping through the dict keys in the __init__ function).

I realize that the problem is related to what is described here but I cannot find a way around it. [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

Any tips on how to do it the correct way, and make the instances not share the store dict?

Thomas N
  • 3
  • 2

0 Answers0