RFC: Proposal: Deterministic Object Destruction

ooomzay at gmail.com ooomzay at gmail.com
Sat Mar 3 20:14:48 EST 2018


On Friday, March 2, 2018 at 5:29:54 AM UTC, Rustom Mody wrote:
> Please excuse if this has been addressed above and/or its too basic:
> What's the difference between RAII and python's with/context-managers?

They address the same problem but I am claiming that RAII achieves this in a significantly more elegant/pythonic way without involving any special keywords or methods. in summary _if_ the PEP was adopted and/or you are using CPython today then:-

def riaa_file_copy(srcname, dstname):
    src = RAIIFile(srcname, 'r')
    dst = RAIIFile(dstname, 'w')
    for line in src:
        dst.write(line)

becomes equivalent to:

def pep343_file_copy(srcname, dstname):
    with open(srcname, 'r')  as src,
         open(dstname, 'w') as dst:
    for line in src:
        dst.write(line)

RAII resource management is also simpler to implement only requiring existing __init__ and __del__ methods (e.g. to open/close the underlying file) and the resource objects are invariant. Which means the objects/managers do not need to track the enter/exit state - as there is no way to access them when they are not "open" in RAII.








More information about the Python-list mailing list