[Python-Dev] Making proxy types easier to write and maintain
Brett Cannon
bcannon at gmail.com
Wed Mar 19 20:32:50 CET 2014
On Wed Mar 19 2014 at 2:46:48 PM, Antoine Pitrou <solipsis at pitrou.net>
wrote:
>
> Hello,
>
> It is known to be cumbersome to write a proxy type that will correctly
> proxy all special methods (this has to be done manually on the type,
> since special methods are not looked up on the instance: a __getattr__
> method would not work).
>
> Recently we've had reports of two stdlib types that forgot to
> implement some special methods:
> - weakref.proxy doesn't implement __reversed__:
> http://bugs.python.org/issue19359
> - mock.MagicMock doesn't implement __truediv__:
> http://bugs.python.org/issue20968
>
> In http://bugs.python.org/issue19359#msg213530 I proposed to introduce a
> "proxy
> protocol" (__proxy__ / tp_proxy) that would be used as a fallback by
> _PyObject_LookupSpecial to fetch the lookup target, i.e.:
>
> def _PyObject_LookupSpecial(obj, name):
> tp = type(obj)
> try:
> return getattr(tp, name)
> except AttributeError:
> return getattr(tp.tp_proxy(), name)
>
> What do you think?
>
Without having the code in front of me, would this only be for magic
methods and attributes, or all attributes? IOW would this mean that if I
assign an object to __proxy__ it would take care of the uses of __getattr__
for proxying?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20140319/1afee8b8/attachment.html>
More information about the Python-Dev
mailing list