Brian van den Broek said unto the world upon 12/01/06 03:42 AM: > [EMAIL PROTECTED] said unto the world upon 12/01/06 03:15 AM: > >>I can think of several messy ways of making a dict that sets a flag if >>it's been altered, but I have a hunch that experienced python >>programmers would probably have an easier (well maybe more Pythonic) >>way of doing this.
<snip> > here's one attempt. (I'm no expert, so wait for better :-) > > >>> class ModFlagDict(dict): > def __init__(self, *args, **kwargs): > super(ModFlagDict, self).__init__(*args, **kwargs) > self.modified = False > def __setitem__(self, key, value): > self.modified = True > super(ModFlagDict, self).__setitem__(key, value) <snip> > It's broken in at least one way: > > >>> newmd = ModFlagDict(3=4, 1=5) > SyntaxError: keyword can't be an expression > >>> > > So, as it stands, no integers, floats, tuples, etc can be keys on > initialization. I think that can be be worked around by catching the > exceptions and setting the desired key-value pairs that way. But, it > is almost 4am, and I also suspect there is a much better way I am not > thinking of :-) Sorry for the self-reply, but I just realized my original code isn't quite so bad as: # class ModFlagDict as before >>> mdict = ModFlagDict({42:"This will work", (7, 6):"Python comes through, again!"}) >>> mdict {42: 'This will work', (7, 6): 'Python comes through, again!'} >>> mdict.modified False >>> mdict[42]=":-)" >>> mdict {42: ':-)', (7, 6): 'Python comes through, again!'} >>> mdict.modified True >>> I'll wager someone will point out a better way still, though. Best, Brian vdB -- http://mail.python.org/mailman/listinfo/python-list