Related to the above, Is there anything wrong with the following code to replace the *instance* rather than the class dict? It seems very crude, but appears to work.
Thanks, Andrew class TupleSuper: def __new__(cls): print('in new') instance = object.__new__(cls) instance.__dict__ = TupleDict(instance.__dict__) return instance class D(TupleSuper): def __init__(self): self.a = 1 if __name__ == '__main__': d = D() assert d.a == 1 d.a = 2 assert d.a == 2 d.a = 'three' assert d.a == 'three' print('woop') On Thursday, April 7, 2011 7:31:16 PM UTC-3, andrew cooke wrote: > > class TupleDict(dict): > '''Stores additional info, but removes it on __getitem__().''' > > def __setitem__(self, key, value): > print('setting', key, value) > super(TupleDict, self).__setitem__(key, (value, 'secret')) > > def __getitem__(self, key): > value = super(TupleDict, self).__getitem__(key) > print('getting', key, value[0]) # drop secret > return value[0] -- http://mail.python.org/mailman/listinfo/python-list