overloading __getattr__ and inheriting from dict
mwh at python.net
Mon Mar 15 13:58:30 CET 2004
Benoît Dejean <bnetNOSPAM at ifrance.com> writes:
> class TargetWrapper(dict):
> def __init__(self, **kwargs):
> dict.__init__(self, kwargs)
> __getattr__ = dict.__getitem__
> __setattr__ = dict.__setitem__
> __delattr__ = dict.__delitem__
> tw = TargetWrapper()
> tw.a = "spam" # ok
> del tw.a # ok
> tw.b = "egg"
> print tw.b
> last line give me an
> AttributeError: 'TargetWrapper' object has no attribute 'b'
> if i define
> def __getitem__(self, name):
> return dict.__getitem__(self, name)
> __getattr__ = __getitem__
> then the accessing the b attribute is ok. what's wrong ?
I'm not sure, but changing
__getattr__ = dict.__getitem__
__getattribute__ = dict.__getitem__
makes things behave more like I think you expect.
Of course, it obviously is beta hardware so such things are to be
expected, but that doesn't mean that you can't point your fingers
and generate a nelson style HAHA at a multi billion dollar
corporation's expense. -- CmdrTaco on slashdot.org
More information about the Python-list