Uživatelé volají Destructor pro zničení objektu. V Pythonu nemusí vývojáři potřebovat destruktory tolik, kolik je potřeba v jazyce C++. Je to proto, že Python má garbage collector, jehož funkcí je správa paměti automaticky.
V tomto článku probereme, jak fungují destruktory v Pythonu a kdy je uživatelé mohou používat.
The __z__() funkce se používá jako funkce destruktoru v Krajta . Uživatel může zavolat na __z__() funkce, když byly odstraněny všechny odkazy na objekt a objekt se stane shromážděným odpadkem.
Syntax:
def __del__(self): # the body of destructor will be written here.
Uživatelé by si také měli uvědomit, že odkaz na objekty je také odstraněn, když objekt opustí odkaz nebo když kód skončí.
V následujícím příkladu použijeme funkci __del__() a klíčové slovo del pro smazání všech referencí objektu, takže se destruktor zapojí automaticky.
Například:
# 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
Výstup:
The class called Animals is CREATED. The destructor is called for deleting the Animals.
Vysvětlení -
Ve výše uvedeném kódu se destruktor zavolal, když jsou odkazy na objekt odstraněny nebo po ukončení programu. To znamená, že počet odkazů pro objekt se stane nulou a ne, když objekt přejde mimo rozsah. Vysvětlíme to na následujícím příkladu.
Můžeme si také všimnout, že destruktor je volán po ukončení programu.
Příklad:
# 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')
Výstup:
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.
Nyní v dalším příkladu uvidíme, že při volání funkce function() vytvoří instanci třídy Zebra, která se předá třídě Lion, která pak nastaví odkaz na třídu Zebra a výsledkem bude kruhový odkaz.
Příklad:
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()
Výstup:
Zebra is dead
Obecně platí, že sběrač odpadků Pythonu, který se používá pro detekci těchto typů cyklických odkazů, také odstraní odkaz. Ale ve výše uvedeném příkladu se vlastní destruktor používá k označení této položky jako nesbíratelné.
Zjednodušeně to znamená, že popelář nezná pořadí, ve kterém má být objekt zničen, a tak je opustí. Pokud jsou tedy instance uživatelů zapojeny do tohoto cyklického odkazu, zůstanou uloženy v paměti tak dlouho, dokud bude aplikace běžet.
Závěr
V tomto článku jsme vysvětlili funkci destruktorů v Pythonu a jak je mohou uživatelé použít k mazání objektů, jejichž reference jsou již odstraněny z paměti.