On 3 October 2017 at 03:13, Koos Zevenhoven <k7ho...@gmail.com> wrote: > Well, it's not completely unrelated to that. The problem I'm talking about > is perhaps most easily seen from a simple context manager wrapper that uses > composition instead of inheritance: > > class Wrapper: > def __init__(self): > self._wrapped = SomeContextManager() > > def __enter__(self): > print("Entering context") > return self._wrapped.__enter__() > > def __exit__(self): > self._wrapped.__exit__() > print("Exited context") > > > Now, if the wrapped contextmanager becomes a PEP 521 one with __suspend__ > and __resume__, the Wrapper class is broken, because it does not respect > __suspend__ and __resume__. So actually this is a backwards compatiblity > issue.
This is a known problem, and one of the main reasons that having a truly transparent object proxy like https://wrapt.readthedocs.io/en/latest/wrappers.html#object-proxy as part of the standard library would be highly desirable. Actually getting such a proxy defined, implemented, and integrated isn't going to be easy though, so while Graham (Dumpleton, the author of wrapt) is generally amenable to the idea, he doesn't have the time or inclination to do that work himself. In the meantime, we mostly work around the problem by defining new protocols rather than extending existing ones, but it still means it takes longer than it otherwise for full support for new interfaces to ripple out through various object proxying libraries (especially for hard-to-proxy protocols like the new asynchronous ones that require particular methods to be defined as coroutines). Cheers, Nick. -- Nick Coghlan | ncogh...@gmail.com | Brisbane, Australia _______________________________________________ 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