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__?"