logo

Destruktörer i Python

Användarna ringer Destructor för att förstöra objektet. I Python behöver utvecklare kanske inte destruktörer så mycket det behövs i C++-språket. Detta beror på att Python har en skräpsamlare vars funktion är att hantera minneshantering automatiskt.

I den här artikeln kommer vi att diskutera hur destruktörerna i Python fungerar och när användarna kan använda dem.

De __av__() funktion används som destruktorfunktionen i Pytonorm . Användaren kan ringa till __av__() funktion när alla referenser till objektet har raderats och det blir skräp som samlas in.

Syntax:

 def __del__(self): # the body of destructor will be written here. 

Användarna bör också notera att referensen till objekten också raderas när objektet går ur referensen eller när koden slutar.

I följande exempel kommer vi att använda funktionen __del__() och nyckelordet del för att ta bort alla referenser till objektet så att destruktorn kommer att involvera automatiskt.

Till exempel:

 # we will illustrate destructor function in Python program # we will create Class named Animals class Animals: # we will initialize the class def __init__(self): print('The class called Animals is CREATED.') # now, we will Call the destructor def __del__(self): print('The destructor is called for deleting the Animals.') object = Animals() del object 

Produktion:

 The class called Animals is CREATED. The destructor is called for deleting the Animals. 

Förklaring -

I ovanstående kod har destruktören anropat när referenserna till objektet raderas eller efter att programmet avslutats. Detta innebär att referenstalet för objektet blir noll och inte när objektet går utanför räckvidden. Vi kommer att förklara detta genom att visa nästa exempel.

Vi kan också märka att destruktören anropas efter programmets slut.

Exempel:

 # We will create Class named Animals class Animals: # Initialize the class def __init__(self): print('The class called Animals is CREATED.') # now, we will Call the destructor def __del__(self): print('The destructor is called for deleting the Animals.') def Create_object(): print('we are creating the object') object = Animals() print('we are ending the function here') return object print('we are calling the Create_object() function now') object = Create_object() print('The Program is ending here') 

Produktion:

 we are calling the Create_object() function now we are creating the object The class called Animals is CREATED. we are ending the function here The Program is ending here The destructor is called for deleting the Animals. 

Nu i nästa exempel kommer vi att se att när funktionen() anropas kommer den att skapa instansen av klassen Zebra, som skickar sig själv till klassen Lion, som sedan kommer att sätta referensen till klassen Zebra, och det kommer att resultera i den cirkulära referensen.

Exempel:

 class Animals: # we will initialize the class def __init__(self): print(' The class called Animals is CREATED.') class Lion: def __init__(self, zebraa): self.zebra = zebraa class Zebra: def __init__(self): self.lion = Lion(self) def __del__(self): print('Zebra is dead') def function(): zebra = Zebra() function() 

Produktion:

 Zebra is dead 

I allmänhet kommer Garbage collector of Python, som används för att upptäcka dessa typer av cykliska referenser, också att ta bort referensen. Men i exemplet ovan används den anpassade förstöraren för att markera det här föremålet som oinsamlingsbart.

På ett enkelt språk betyder det att sopsamlaren inte vet i vilken ordning föremålet ska förstöras, så den lämnar dem. Så om användarnas instanser är inblandade i denna cirkulära referens kommer de att förbli lagrade i minnet så länge som applikationen körs.

Slutsats

I den här artikeln förklarade vi funktionen för Destructors i Python och hur användarna kan använda dem för att ta bort objekt vars referenser redan är borttagna från minnet.