Context without manager
Piergiorgio Sartor
piergiorgio.sartor.this.should.not.be.used at nexgo.REMOVETHIS.de
Sun Nov 26 13:58:58 EST 2023
On 26/11/2023 18.50, Dieter Maurer wrote:
> Piergiorgio Sartor wrote at 2023-11-25 22:15 +0100:
>> ...
>> Apparently, the "with" context manager is not usable
>> in classes, at least not with __init__() & co.
>
> You can use `with` in classes -- with any context manager.
> However, you would usually not use `with` with a file you have opened
> in `__init__`.
>
> If a class defines `__enter__` and `__exit__` (i.e.
> the "cntext manager protocol"), then its instances
> can be used with the `with` statement.
>
> The important use case for a context manager is the
> situation:
> set up a context (--> method `__enter__`)
> perform some operations in this context (--> body of `with` statement)
> tear down the context (--> method `__exit__`).
> If you do not have this case (e.g. usually if you open the file
> in a class's `__init__`), you do not use a context manager.
Very clear, but what if the class is *not* "open()",
but something else _requiring_ using "with"?
How to do this in a "__init__()" of a class?
In other words, what if "open()" could *only* be used
with "with" and not just by assigning "fp = open()"?
The problem is I've some SDK of some device which
provides context manager *only* classes.
I *cannot* do:
device = device_open(...)
device.do_something()
device.close()
I *must* do:
with device_open() as device:
device.do_something()
Nevertheless, I _need_ to have a class
where the device is opened in the __init__()
and used in some methods.
Any ideas?
bye,
--
piergiorgio
More information about the Python-list
mailing list