[Python-Dev] Issue 643841: Including a new-style proxy base class in 2.6/3.0
Nick Coghlan
ncoghlan at gmail.com
Thu May 22 15:47:24 CEST 2008
Fred Drake wrote:
> On May 21, 2008, at 5:41 AM, Nick Coghlan wrote:
>> While a proxy class written in C would no doubt be faster than one
>> written in Python, one of the things I'm hoping to achieve is for the
>> stdlib generic proxy to serve as an example for people writing their
>> own new-style proxy classes in addition to being usable as a base
>> class (Adam Olsen suggested ProxyMixin instead of ProxyBase as a
>> possible name).
>
>
> The idea that it would serve as an example seems odd; the reason to make
> things part of the standard library is because their implementation
> needs to track the Python core closely. For a proxy, it would be the
> need to reflect additional slot methods as they're added. A Python
> implementation may be able to do this just fine, but the performance
> penalty would make it uninteresting for many large applications.
I've added a documentation file to the tracker item and kicked it in
Barry's direction (I also bumped the priority to 'release blocker'
because I think we need an explicit decision on this one from Barry or
Guido before the first beta release of 3.0).
Here's what I included in the proposed documentation for ProxyMixin
(note that I modelled the implicit unwrapping behaviour directly on the
behaviour of weakref.proxy):
class:: ProxyMixin(target)
A proxy class that ensures all special method invocations which may
otherwise bypass the normal :method:`__getattribute__` lookup
process are correctly delegated to the specified target object.
Normal attribute manipulation operations are also delegated to the
specified target object.
All operations on a :class:`ProxyMixin` instance return an unproxied
result. Operations involving multiple :class:`ProxyMixin` instances
(e.g. addition) are permitted, and endeavour to return the same
result as would be calculated if the proxy objects were not involved.
Custom proxy class implementations may inherit from this class
in order to automatically delegate all such special methods
that the custom proxy class does not need to provide special
handling for. This may not be practical for more complex
delegation scenarios (e.g. a local interface to a remote
object, or delegating to a weakly referenced target as in
:code:`weakref.proxy`), but :class:`ProxyMixin` may still be used
as a reference when developing such classes to identify which methods
must be defined explicitly on the proxy type in order for them to be
delegated correctly by the Python interpreter.
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
---------------------------------------------------------------
http://www.boredomandlaziness.org
More information about the Python-Dev
mailing list