Replacing *instance* dict

andrew cooke andrew at acooke.org
Thu Apr 7 19:47:37 EDT 2011


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]



More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /