Skip to content Skip to sidebar Skip to footer

How To Achive - File Write Open On __del__?

I m trying to do a some activity on class obj destruction. How do I achive file open in _del__ function? (I m using Python 3.4) class iam(object): def __init__(self):

Solution 1:

Below code is work fine.

class iam(object):

def __init__(self):
    print("I m born")

def __del__(self):
    #"open" function still in __builtins__ 
    f = open("memory_report.txt", "w")
    f.write("He gone safe")
    f.close()

def write_iam():
        i=iam()

if __name__ == '__main__':
    write_iam()
    print("Script Ends. Now to GC clean memory")

In this case:

class iam(object):

def __init__(self):
    print("I m born")

def __del__(self):
    #__builtins__.open  has remove 
    f = open("memory_report.txt", "w")
    f.write("He gone safe")
    f.close()

if __name__ == '__main__':
    i = iam()
    print("Script Ends. Now to GC clean memory")

When exit the __main__ function, before GC delete the "i" instance (execute i.__delete__) "open" function has remove from __builtins__.

Solution 2:

As others have mentioned, don't use the ____del___ method to perform such cleanup. Instead, use either contextmanagers (with-statement) or register atexit-handlers.

Solution 3:

The problem is, as MuSheng tried to explain, that the __builtins__ are removed before your__del__ is called.

You can trigger the __del__ yourself by assigning None to the variable.

MuSheng's code could be this:

classiam():
    def__init__(self):
        print("I m born")

    def__del__(self):
        #"open" function still in __builtins__ withopen("memory_report.txt", "w") as f:
            f.write("He gone safe")

if __name__ == '__main__':
    i = iam()
    i = None# This triggers `__del__`print("Script Ends. Now to GC clean memory")

MuSheng deserves some upvotes, IMO

Solution 4:

Below is an alternate I used - Using atexit handlers:

import atexit


classiam(object):

    def__init__(self):
        print("I m born")
        atexit.register(self.cleanup)

    defcleanup(self):
        f = open("memory_report.txt", "w")
        f.write("He gone safe")
        f.close()
        print ("Done")


if __name__ == '__main__':
    i = iam()
    print("Script Ends. Now to GC clean memory")

Output:

I m born
Script Ends. Now to GC clean memory
Done

Post a Comment for "How To Achive - File Write Open On __del__?"