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.


_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to