Oh, I neglected to include the definition of my boring Foo class:

>>> class Foo(object):
...     def __init__(self, val):
...         self.val = val
...

The only important thing about it is that it DOES NOT have __enter__() or
__exit__() methods.

On Sat, May 18, 2019 at 9:40 PM David Mertz <me...@gnosis.cx> wrote:

> On Sat, May 18, 2019 at 8:17 PM Yonatan Zunger <zun...@humu.com> wrote:
>
>> Instead, we should permit any expression to be used. If a value does not
>> expose an __enter__ method, it should behave as though its __enter__
>> method is return self; if it does not have an __exit__ method, it should
>> behave as though that method is return False.
>>
>
> I'm not sure why you would want this.  But it is really easy to implement
> with a named function already.  I think it would be better to experiment
> with a wrapper function first, maybe put it on PyPI, before changing the
> language for something whose purpose is unclear (to me).
>
> I think you probably mean something other than what you actually write.
> It doesn't really make sense for "any expression" as far as I can tell.
> What would it possibly mean to write:
>
> with (2+2) as foo:
>     print(foo)
>
> But anyway, my toy simple implementation which satisfies the stated
> requirement:
>
> >>> from contextlib import contextmanager
> >>> @contextmanager
> ... def zungerfy(obj):
> ...     if hasattr(obj, '__enter__'):
> ...         yield obj.__enter__()
> ...     else:
> ...         yield obj
> ...     if hasattr(obj, '__exit__'):
> ...         obj.__exit__()
> ...
> >>> with zungerfy(Foo(42)) as foo:
> ...     print("Hello", foo.val)
> ...
> ...
> Hello 42
> >>> with zungerfy(open('README.md')) as foo:
> ...     print("Hello", foo.readline())
>
> ...
> Hello ## About the course
>
>
> --
> Keeping medicines from the bloodstreams of the sick; food
> from the bellies of the hungry; books from the hands of the
> uneducated; technology from the underdeveloped; and putting
> advocates of freedom in prisons.  Intellectual property is
> to the 21st century what the slave trade was to the 16th.
>


-- 
Keeping medicines from the bloodstreams of the sick; food
from the bellies of the hungry; books from the hands of the
uneducated; technology from the underdeveloped; and putting
advocates of freedom in prisons.  Intellectual property is
to the 21st century what the slave trade was to the 16th.
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to