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.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme