Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Omien Konteksti-Managerien Luominen | Advanced File Handling & Context Managers
Pythonin Rakenteellinen Ohjelmointi

Omien Konteksti-Managerien Luominen

Pyyhkäise näyttääksesi valikon

Hyödyntääksesi Pythonin kontekstinhallinnan täyden potentiaalin, voit luoda oman kontekstinhallintasi määrittelemällä luokan, joka toteuttaa __enter__- ja __exit__-metodit. __enter__-metodia kutsutaan, kun suoritus siirtyy with-lauseen kontekstiin, ja sen palautusarvo sijoitetaan muuttujaan as-avainsanan jälkeen. __exit__-metodia kutsutaan, kun suoritus poistuu kontekstista, riippumatta siitä tapahtuuko poistuminen normaalisti vai poikkeuksen vuoksi. Tämä rakenne mahdollistaa resurssien turvallisen ja ennustettavan käyttöönoton ja vapauttamisen, mikä on erityisen hyödyllistä tiedostojen, verkkoyhteyksien tai lukkojen hallinnassa.

__exit__-metodi saa kolme argumenttia: exc_type, exc_value ja traceback. Nämä tarjoavat tietoa mahdollisesta poikkeuksesta, joka tapahtui kontekstilohkon sisällä. Jos __exit__ palauttaa arvon True, poikkeus tukahdutetaan; muussa tapauksessa poikkeus välittyy eteenpäin siivouksen jälkeen. Toteuttamalla nämä metodit voit hallita tarkasti resurssin käyttöönotto- ja siivouslogiikkaa, mikä tekee koodistasi kestävämpää ja helpommin ylläpidettävää.

class FileLogger:
    def __init__(self, filename, logname):
        self.filename = filename
        self.logname = logname
        self.file = None
        self.log = None

    def __enter__(self):
        self.file = open(self.filename, "r")
        self.log = open(self.logname, "a")
        self.log.write(f"Opened file: {self.filename}\n")
        return self.file

    def __exit__(self, exc_type, exc_value, traceback):
        if self.file:
            self.file.close()
            self.log.write(f"Closed file: {self.filename}\n")
        if self.log:
            self.log.close()
        # Do not suppress exceptions
        return False

Seuraava koodi havainnollistaa räätälöidyn kontekstinhallintaluokan FileLogger käyttöä. Tämä luokka on suunniteltu avaamaan kohdetiedosto luettavaksi ja lokitiedosto lokimerkintöjen lisäämistä varten. Kun kontekstiin siirrytään (with-lauseen avulla), tiedoston avaaminen kirjataan lokiin. Kun kontekstista poistutaan – joko normaalin suorituksen tai poikkeuksen vuoksi – tiedoston sulkeminen kirjataan lokiin ja molemmat tiedostot suljetaan asianmukaisesti. __exit__-metodi ei tukahduta poikkeuksia, vaan antaa niiden välittyä siivouksen jälkeen.

question mark

Mikä seuraavista kuvaa parhaiten __exit__-metodin roolia räätälöidyssä kontekstinhallinnassa?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 5

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 2. Luku 5
some-alt