Introductie tot Destructor in Python
Constructors en Destructors zijn twee belangrijke concepten in python. Constructors worden aangeroepen wanneer het object van een klasse wordt gemaakt. Destructors worden echter aangeroepen wanneer het object van een klasse wordt vernietigd. Daarom is het niet verkeerd om te zeggen, Constructors, zijn het tegenovergestelde van Destructors. Omdat Python een objectgeoriënteerde programmeertaal is, maakt Constructors en Destructors ook deel uit van deze taal.
Destructors worden niet zoveel gebruikt in python als Java en C ++. Maar wetende dat het een nog sterkere basis vormt in python.
Destructors kunnen worden bewezen zeer nuttig als het gaat om gezond verstand werk van het programma. Bijvoorbeeld: de gebruikte bronnen vrijgeven voordat ze uit het programma komen, zoals herinneringen vrijgeven, bestanden sluiten, enz.
Trefwoord dat wordt gebruikt om Destructor te definiëren is: __del __ () trefwoord:
Syntaxis:
def __del__(self):
#destructor body
Zoals je kunt zien, is __del__ het sleutelwoord dat wordt gebruikt om de destructor te definiëren. Wanneer het wordt aangeroepen, wordt alle verwijzing naar dat object verwijderd, ook wel garbage collection genoemd.
Voorbeelden van Destructor in Python
Laten we verschillende voorbeelden van destructor in python bekijken om een beter begrip te krijgen:
Voorbeeld 1
class Grocery:
# Initializing
def __init__(self):
print('Grocery created.')
# Deleting (Calling destructor)
def __del__(self):
print('Destructor called, Grocery deleted.')
obj = Grocery()
del obj
Output:
"Kruidenier" is de klasse gedefinieerd met zijn speciale methoden: constructor & destructor.
Men kan dus zien wanneer het object van de klasse 'Kruidenier' is gemaakt. Het roept automatisch __init__ op, wat de constructor van de klasse is. Wanneer "del obj" echter wordt uitgevoerd om een object te verwijderen, wordt de destructormethode automatisch aangeroepen.
Voorbeeld 2
class Text:
def __del__(self):
print "Text deleted"
a = Text()
del a
a = Text()
b = a
del b
del a
Output:
Tekst is een klasse, "a" is objectverwijzing naar de klasse. "B" lokale kopie van die referentie "a". Dus wanneer b wordt verwijderd, wordt de methode niet aangeroepen, omdat deze gewoon de lokale kopie bevat.
Voordelen van Destructor in Python
Zoals eerder gezegd, wordt de destructor niet zo veel in python gebruikt als wel in Java, C ++. Het concept blijft echter hetzelfde. Hier zijn enkele voordelen van het gebruik ervan in programma's:
- Onnodige objecten worden automatisch verwijderd. Dit maakt de geheugenruimte vrij die bekend staat als Garbage collection.
- Het voordeel ligt ook in het feit dat het automatisch wordt opgeroepen.
Bepaalde stappen die moeten worden genomen tijdens het gebruik van destructor:
1. Python weet niet in welke volgorde het vernietigen van objecten veiliger is en dat deze cirkelvormige verwijzingen naar elkaar kunnen bevatten. Daarom raden mensen aan om na elke functie expliciet "sluiten" te gebruiken. Maar in het geval van uitzonderingen wordt het lastig om de close-methode te beheren. Daarom is het gebruik van destructoren beter, rekening houdend met de cyclische verwijzingen.
2. Cyclische referenties als het niet goed wordt behandeld, bestaat de kans op lekkende abstracties, plus een slecht ontwerp.
Het beste is: middelen moeten worden behandeld door het laagste niveau-object van de klasse.
3. Wanneer iemand dringend behoefte heeft aan het gebruiken van cyclische verwijzingen naar objecten in complexe code, biedt Python daar een goede oplossing voor in de vorm van modulenaam: weakref. Dat betekent dat er zwakke referenties worden gegeven aan de referent, wat uiteindelijk helpt bij het implementeren van cache en het grote object niet langer in leven houdt. Wanneer een groot object niet in leven is, betekent dit dat het in de cache verschijnt.
Laten we het door een kleine code bekijken om helder inzicht te krijgen:
Code:
import weakref
class C:
def method(self):
print("Hi!method called!")
c = C()
r = weakref.ref(c)
print(c)
print(r)
Output:
Zoals men kan zien is "r" een zwakke verwijzing naar het object "c".
Als we een methode verwijzen naar "r" zoals c2 = r (). Dan moeten "c" en "c2" hetzelfde zijn, omdat hetzelfde verwijst. Zie het onderstaande voorbeeld:
In het geval van het verwijderen van het hoofdobject verliest het referentieobject zijn bestaan. Zie het onderstaande voorbeeld:
Zoals je kunt zien, zijn de afdrukresultaten (r ()) "Geen". In dat geval:
gc.collect () resulteert in 0.
4. __del__ moet niet worden verward met del in python. __del__ is een speciale methode van een klasse die destructor is en "del" wordt gebruikt om een variabele te vernietigen die in de python-omgeving is gedefinieerd. Beide zijn twee totaal verschillende dingen.
Leuk vinden:
xx = 10
del xx
Conclusie
Na het doornemen van de bovenstaande inhoud, kunnen we zeggen dat constructors en destructors een cruciaal onderdeel van Python zijn. Destructor speelt een cruciale rol bij het beheer van het geheugen, waar het veel opruimtaken uitvoert op objecten die worden gebruikt bij het programmeren. Omgaan met kleine programma's, geeft u misschien niet het werkelijke beeld achter het gebruik van destructors. Terwijl het echter gaat om programma's op productieniveau of complexe coderegels, kan het belang van destructors duidelijk worden begrepen, omdat geheugengebruik daar erg belangrijk wordt. Rekening houdend met het idee van cyclische referentie kan absoluut leiden tot een goed ontwerp tijdens het werken met destructors.
Aanbevolen artikelen
Dit is een gids voor Destructor in Python. Hier bespreken we de syntaxis, voordelen samen met de verschillende voorbeelden van python destructor. U kunt ook de volgende artikelen bekijken voor meer informatie -
- Abstracte klasse in Python
- Python-editors
- Python Break-verklaring
- Ruilen in Python
- Voorbeelden van swappen in PHP
- Break Statement in JavaScript
- Volledige gids voor Destructor in PHP met voorbeelden