[Python-Dev] Making proxy types easier to write and maintain

Antoine Pitrou solipsis at pitrou.net
Wed Mar 19 19:46:07 CET 2014


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?

Regards

Antoine.




More information about the Python-Dev mailing list