Tuhoaja Pythonissa - Eri esimerkkejä sen eduista

Sisällysluettelo:

Anonim

Destructorin esittely Pythonissa

Rakentajat ja Destructors ovat kaksi tärkeätä käsitettä python. Rakentajia kutsutaan, kun luokan objekti luodaan. Hävittäjiä kutsutaan kuitenkin, kun luokan esine tuhoutuu. Siksi ei ole väärin sanoa, että rakentajat ovat päinvastoin tuhoajia. Python on oliokeskeinen ohjelmointikieli, ja myös rakentajat ja Destruktorit ovat osa tätä kieltä.

Destruktoreita ei pythonissa käytetä niin paljon kuin Java ja C ++. Mutta sen tunteminen tekee entistä vahvemman perustan pythonille.

Destruktorit voidaan osoittaa erittäin hyödyllisiksi, kun kyse on ohjelman järkevyydestä. Esimerkiksi: käytettyjen resurssien vapauttaminen ennen lähtöä ohjelmasta, kuten muistien vapauttaminen, tiedostojen sulkeminen jne.

Destructorin määrittelemiseen käytetty avainsana on: __del __ () avainsana:

Syntaksi:

def __del__(self):
#destructor body

Kuten voidaan nähdä, __del__ on avainsana, jota käytetään määrittelemään tuhoaja. Kun sitä kutsutaan, kaikki viittaukset siihen objektiin poistetaan, joka tunnetaan myös nimellä roskien keräys.

Esimerkkejä Pythonin tuhoajasta

Katsotaanpa erilaisia ​​esimerkkejä tuhoajasta pythonissa ymmärtääksesi paremmin:

Esimerkki # 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

lähtö:

Ruokakauppa on luokka, joka määritellään sen erityisillä menetelmillä: rakentaja ja tuhoaja.

Joten voidaan nähdä, kun luokan "Ruokakaupat" kohde on luotu. Se kutsuu automaattisesti __init__, joka on luokan rakentaja. Kuitenkin kun ”del obj” suoritetaan objektin poistamiseksi, destructor-menetelmä kutsutaan automaattisesti.

Esimerkki 2

class Text:
def __del__(self):
print "Text deleted"
a = Text()
del a
a = Text()
b = a
del b
del a

lähtö:

Teksti on luokka, ”a” on objektiviittaus luokkaan. B-paikallinen kopio viitteestä a. Joten kun b poistetaan, menetelmä ei saa kutsua, koska se vain pitää paikallisen kopion.

Destructorin edut Pythonissa

Kuten aiemmin sanottiin, tuhoajaa ei käytetä niin paljon pythonissa kuin niin paljon Javassa, C ++. Konsepti on kuitenkin sama. Tässä on joitain etuja sen käytöstä ohjelmissa:

  • Tarpeettomat esineet poistetaan automaattisesti. Tämä vapauttaa muistitilaa, joka tunnetaan nimellä Roskakori.
  • Etuna on myös se, että se vetoaa automaattisesti.

Tietyt vaiheet, jotka tulisi huolehtia käyttäessäsi tuhoajaa:

1. Python ei tiedä, missä järjestyksessä tuhoamiset esineet ovat turvallisempia, koska niissä voi olla pyöreät viittaukset toisiinsa. Tämän vuoksi ihmiset suosittelevat ”sulkemaan” käyttämistä nimenomaisesti jokaisen toiminnon jälkeen. Mutta poikkeuksellisissa tapauksissa läheisen menetelmän hallinta on hankalaa. Siksi destruktorien käyttö on parempi, pitäen mielessä sykliset viitteet.

2. Sykliset referenssit, jos sitä ei käsitellä hyvin, mahdollisuudet ovat tiiviit abstraktiot sekä huono suunnittelu.
Parasta on: resursseja tulisi hoitaa luokan alimman tason esine.

3. Kun joku tarvitsee syklisiä viittauksia objekteihin monimutkaisessa koodissa, Python tarjoaa siihen hyvän ratkaisun moduulin nimen muodossa: nõrkaref. Tämä tarkoittaa, että referenssille annetaan heikkoja viitteitä, mikä viime kädessä auttaa välimuistin toteuttamisessa eikä suuren esineen pitämistä enää hengissä. Kun suuri esine ei ole elossa, se tarkoittaa, että se näkyy välimuistissa.

Katsotaanpa sitä pienen koodin läpi saadaksesi selkeän ymmärryksen:

Koodi:

import weakref
class C:
def method(self):
print("Hi!method called!")
c = C()
r = weakref.ref(c)
print(c)
print(r)

lähtö:

Kuten voidaan nähdä “r” on heikko viittaus esineeseen “c”.

Jos teemme menetelmäviittauksen r: ään, kuten c2 = r (). Silloin "c": n ja "c2": n tulisi olla samat, koska viittaa samaan. Katso alla oleva esimerkki:

Pääobjektin poistamisen tapauksessa referenssiobjekti menettää olemassaolonsa. Katso alla oleva esimerkki:

Kuten voidaan huomata, tulostustulokset (r ()) ovat ”Ei mitään”. Siinä tapauksessa:
gc.collect () johtaa 0: ksi.

4. __del__ ei pidä sekoittaa del pythoniin. __del__ on luokan erityinen menetelmä, joka on tuhoava ja ”del” -koodia käytetään python-ympäristössä määritellyn muuttujan tuhoamiseen. Molemmat ovat kaksi täysin erilaista asiaa.

Kuten:

xx = 10
del xx

johtopäätös

Edellä mainitun sisällön käytyään läpi voidaan sanoa, että rakentajat ja rakentajat ovat tärkeä osa Pythonia. Destructorilla on keskeinen rooli muistin hallinnassa, kun se suorittaa monia puhdistustehtäviä ohjelmoinnissa käytetyille kohteille. Pienten ohjelmien käsitteleminen ei välttämättä anna sinulle todellista kuvaa käytöstä, joka liittyy destruktorien käyttämiseen. Vaikka käsitellään tuotantotason ohjelmia tai mitä tahansa monimutkaisia ​​koodirivejä, rakentajien tärkeys voidaan kuitenkin ymmärtää selvästi, koska muistin käytöstä tulee siellä erittäin tärkeä. Syklisen referenssin ajatuksen pitäminen mielessä voi ehdottomasti johtaa hyvään suunnitteluun, kun työskentelet rakoittajien kanssa.

Suositellut artikkelit

Tämä on opas Destructoriin Pythonissa. Tässä keskustellaan syntaksista, eduista sekä pythonhävittäjän erilaisista esimerkeistä. Voit myös katsoa seuraavia artikkeleita saadaksesi lisätietoja -

  1. Abstrakti luokka Pythonissa
  2. Python-toimittajat
  3. Python Break -lausunto
  4. Vaihtaminen Pythonissa
  5. Esimerkkejä vaihtamisesta PHP: ssä
  6. Break lausunto JavaScript
  7. Täydellinen opas hävittäjään PHP: ssä esimerkkeinä