[Python-Dev] Pre-PEP: Attribute Access Handlers v2
Gordon McMillan
gmcm@hypernet.com
Fri, 21 Jul 2000 17:27:29 -0400
Paul Prescod wrote:
> Gordon McMillan wrote:
> > This proposal changes those semantics. Hooking an attribute
> > masks anything in a base class with that name. That's probably
> > a good thing, but it should be made explicit since that's not
> > the way __getattr__ behaves.
>
> I don't see the difference.
>
> def __attr_XXX__( self, op, va ):
> Parent.__attr_XXX__( self, op, val )
>
> You can still chain if you want.
You can? Your proposal only specified that when the class
object is being created, method names of the form
__attr_XXX__ would cause stuff to happen in the way the class
is built. You never said that accesses to things named
__YYY_XXX__ on another object would also get transformed
into something else.
Also, what if the base class just has "attr" - not a hook at all?
It will be masked by the hook (which is the difference in
behavior I was pointing out).
> > Similarly, there's a difference from __setattr__. If you assign
> > to the instance.__dict__, the hook will no longer apply for
> > that instance / attribute.
>
> That's true.
>
> > Also note that while this is *safer* than __xxxattr__, it's
> > still not *safe*. Infinite recursion is less likely, but still
> > easily achieved.
>
> The ability to recurse infinitely is a property of methods in
> general, not this method in particular. Okay, it is a little more
> likely because of a logic flaw but I don't see that as being
> unsafe.
And earlier I said:
> > Overriding a method with
> > multiple base class implementations of that method with
the
> > desire to chain to one or more of the base class
> > implementations of that method is a mess. It's not more of
a
> > mess because the method is named __getattr__. ...
So I guess we're even, since we've used the same argument
both ways.
> I see the current __getattr__ hacks as being unsafe because in a
> deep inheritance hierarchy a seemingly insignicant addition in
> one place will break code somewhere else.
Deep inheritance hierarchies are unpythonic <0.001 wink>.
- Gordon