[Python-Dev] PEP 447: add type.__locallookup__

Eric Snow ericsnowcurrently at gmail.com
Thu Sep 19 22:21:40 CEST 2013


On Thu, Sep 19, 2013 at 4:12 AM, Nick Coghlan <ncoghlan at gmail.com> wrote:

> On 19 Sep 2013 20:00, "Paul Moore" <p.f.moore at gmail.com> wrote:
> >
> > On 19 September 2013 10:32, Ronald Oussoren <ronaldoussoren at mac.com>
> wrote:
> > > The first time a method is called the bridge looks for an Objective-C
> selector
> > > with the same name and adds that to the class dictionary. This works
> fine for normal
> > > method lookups, by overriding __getattribute__, but causes problems
> with super:
> > > super happily ignores __getattribute__ and peeks in the class __dict__
> which may
> > > not yet contain the name we're looking for and that can result in
> incorrect results
> > > (both incorrect AttributeErrors and totally incorrect results when the
> name is
> > > not yet present in the parent class' __dict__ but is in the
> grandparent's __dict__).
> >
> > As an alternative approach, could you use a custom dict subclass as
> > the class __dict__, and catch the peeking in the class __dict__ that
> > way? Or is this one of those places where only a real dict will do?
>
> Even Python 3 doesn't let you control the *runtime* type of the class
> dict, only the type used during evaluation of the class body.
>
> I've played with changing that - it makes for a rather special interpreter
> experience :)
>
Same here. :)  The PyDict_* API is not your friend for that.  It's why I
gave up on using a C OrderedDict for tp_dict (opting for a
__definition_order__ attribute on classes instead).

-eric
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20130919/bc4c279e/attachment.html>


More information about the Python-Dev mailing list