Python : __delete__ vs __del__
Last Updated :
27 Dec, 2019
Both __delete__
and __del__
are dunder or magic methods in Python. Dunder or magic methods in Python are the methods having two prefix and suffix underscores in the method name. Dunder here means “Double Under (Underscores)”. These are commonly used for operator overloading.
__del__
__del__
is a destructor method which is called as soon as all references of the object are deleted i.e when an object is garbage collected.
Syntax:
def __del__(self):
body of destructor
.
.
Example: Here is the simple example of destructor. By using del keyword we deleted the all references of object ‘obj’, therefore destructor invoked automatically.
class Example:
def __init__( self ):
print ( "Example Instance." )
def __del__( self ):
print ( "Destructor called, Example deleted." )
obj = Example()
del obj
|
Output:
Example Instance.
Destructor called, Example deleted.
Note : The destructor was called after the program ended or when all the references to object are deleted i.e when the reference count becomes zero, not when object went out of scope.
__delete__
__delete__
is used to delete the attribute of an instance i.e removing the value of attribute present in the owner class for an instance.
Note: This method only deletes the attribute which is a descriptor.
Syntax:
def __delete__(self, instance):
body of delete
.
.
Example:
class Example( object ):
def __init__( self ):
print ( "Example Instance." )
def __delete__( self , instance):
print ( "Deleted in Example object." )
class Foo( object ):
exp = Example()
f = Foo()
del f.exp
|
Output:
Example Instance.
Deleted in Example object.
Difference between __delete and __del__
Example: A combine example of __del__
and __delete__
.
class Example( object ):
def __init__( self ):
self .value = ''
def __delete__( self , instance):
print ( "Inside __delete__" )
def __del__( self ):
print ( "Inside __del__" )
class Foo( object ):
exp = Example()
f = Foo()
del f.exp
|
Output:
Inside __delete__
Inside __del__
Share your thoughts in the comments
Please Login to comment...