overloading __getattr__ and inheriting from dict
Michael Hudson
mwh at python.net
Mon Mar 15 07:58:30 EST 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__
>
>
>
> then
>
> 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__
to
__getattribute__ = dict.__getitem__
makes things behave more like I think you expect.
Cheers,
mwh
--
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
mailing list