[Python-Dev] Fwd: PEP 310(with-syntax): close synonym of __exit__
Samuele Pedroni
pedronis at bluewin.ch
Tue Aug 26 03:38:20 EDT 2003
In PEP 310 Reliable Acquisition/Release Pairs:
http://www.python.org/peps/pep-0310.html
"""
Open Issues
Should existing classes (for example, file-like objects and locks) gain
appropriate __enter__ and __exit__ methods? The obvious reason in favour
is convenience (no adapter needed). The argument against is that if
built-in files have this but (say) StringIO does not, then code that uses
"with" on a file object can't be reused with a StringIO object. So
__exit__ = close becomes a part of the "file-like object" protocol, which
user-defined classes may need to support.
"""
maybe this is too much DWIMish, but it occurred to me that a further option
would be for the semantics to be:
var = expr
if hasattr(var, "__enter__"):
var.__enter__()
try:
suite
finally:
if hasattr(var, "__exit__"):
var.__exit__()
elif hasattr(var, "close"): # consider also close as a synonym of __exit__
var.close()
I'm not proposing to do without __exit__, I recall the next/__next__
debate, but I'm wondering if this is well documented, how many times
considering close a synomym of __exit__ would do the wrong thing, such that
the user would have to hide close somehow to use 'with' & some object, and
this wrt the times someone would need a wrapper to have __exit__ trigger a
close.
I don't think it is worth to have a debate right now, still this should
maybe be added to the PEP as an option to consider.
regards.
More information about the Python-Dev
mailing list