1 -class BitDict(object): 2 keys = None 3 flags = 0 4 5 - def __init__(self, *arg): 6 if arg[0] is False: 7 return 8 self.keys = dict([(item, index) for (index, item) in enumerate(arg)]) 9 10 - def __getitem__(self, key): 11 return self.flags & (2 ** self.keys[key]) != 0 12 13 - def __setitem__(self, key, value): 14 if value: 15 self.flags |= 2**self.keys[key] 16 else: 17 self.flags &= ~2**self.keys[key] 18 19 - def iteritems(self): 20 for key, index in self.keys.iteritems(): 21 yield key, self[key] 22 23 - def setFlags(self, flags): 24 self.flags = flags 25 26 - def getFlags(self): 27 return self.flags 28 29 - def copy(self): 30 newDict = BitDict(False) 31 newDict.keys = self.keys 32 return newDict 33 34 - def __str__(self): 35 actual_dict = {} 36 for key in self.keys: 37 actual_dict[key] = self[key] 38 return '%s' % actual_dict 39 40 - def __repr__(self): 41 return str(self) 42