[Tutor] Question about the object.__del__(self) method

Arup Rakshit ar at zeit.io
Mon Apr 22 14:07:33 EDT 2019


On 22/04/19 3:35 PM, Alan Gauld via Tutor wrote:
> On 22/04/2019 10:18, Arup Rakshit wrote:
>> Consider the below in simple class:
>>
>> class RandomKlass:
>>      def __init__(self, x):
>>          self.x = x
>>      
>>      def __del__(self):
>>          print("Deleted…")
>>
>> Now when I delete the object created from RandomKlass using `del` operator I see the output “Deleted…”. That means `del` operator calls the __del__ method if available.
> No it doesn't, it just means that is what seemed to
> happen in this specific scenario.
>
> Now try:
>
>
>>>> from python_methods import RandomKlass
>>>> o1 = RandomKlass(10)
>>>> o2 = o1
>>>> oblist = [o1,o2]
>>>> del(o1)
>>>> del(o2)
>>>> del(oblist)
> Deleted...
>
> So your __del__() is only called once, after all the
> references to the instance have been deleted.
>
>> Also what the reference count here means?
>> I know that x can hold only one reference at a time.
> Remember that variables in Python are just names that
> refer to objects. So, while the name 'x' can only refer
> to one object at a time, many other names can also refer
> to that same object, as in the example above.
> o1, o2 and oblist[0] and oblist[1] all refer to
> the same original instance of your class.
>
> Each time a new variable references the instance an
> internal "reference count" is incremented. When a referring
> name is deleted the reference count is decremented.
> Once the count reaches zero the instance is deleted
> and its __del__() method, if it exists, is called.
> So, only when all the names referring to the instance
> have been deleted is the __del__() method called. (And it
> is important to realise that there are cases where
> __del__() is never called. Do not rely on __del__()
> for any critical actions - such as saving instance
> data or shutting down the nuclear reactor.)
>
Hello Alan,

Nice explanation. I completly got what is going on. Closing the question 
here. :)

-- 
Thanks,

Arup Rakshit



More information about the Tutor mailing list