Python 3/Kontekstimanageri
Kontekstimanageri (context manager) on olio, joka avaa ja sulkee jonkin resurssin hallitusti. Yhteen kontekstimanageriin tutustuttiin jo tiedostojen käsittelyn yhteydessä. Kontekstimanageri avaa resurssin lohkon alussa ja sulkee sen aina lohkosta poistuttaessa tapahtui poistuminen miten tahansa (lohkon loputtua, return-, break- tai continue-lauseella tai virheen sattuessa). Konteksti avataan with-avainsanalla ja sen palauttama arvo asetetaan muuttujaan as-avainsanalla. Oliota voidaan käyttää kontekstimanagerina, jos se toteuttaa metodit __enter__(self) ja __exit__(self, type, value, traceback).
Esimerkki
muokkaaAlla olevassa esimerkissä kirjaudutaan sisään johonkin palveluun, palvelua käytetään lohkon sisällä ja lopuksi kirjaudutaan ulos.
class ApiSessio:
def __init__(self, käyttäjätunnus, salasana):
self.käyttäjätunnus = käyttäjätunnus
self.salasana = salasana
def __enter__(self):
print(f"[ApiSessio] Käyttäjä ’{self.käyttäjätunnus}’ kirjautuu salasanalla ’{self.salasana}’")
return self
def __exit__(self, type, value, traceback):
print(f"[ApiSessio] Käyttäjä ’{self.käyttäjätunnus}’ kirjautuu ulos")
def hae_tieto(self):
return "Palvelusta haettu tieto"
if __name__ == "__main__":
with ApiSessio('käyttäjä1', 'salasana22!') as sessio:
print(sessio.hae_tieto())
Tulostaa
[ApiSessio] käyttäjä ’käyttäjä1’ kirjautuu salasanalla ’salasana22!’ Palvelusta haettu tieto [ApiSessio] Käyttäjä ’käyttäjä1’ kirjautuu ulos
Jos lohkon sisällä nyt tapahtuisi odottamaton virhe, kirjauduttaisiin silti ulos.
[ApiSessio] käyttäjä ’käyttäjä1’ kirjautuu salasanalla ’salasana22!’ [ApiSessio] Käyttäjä ’käyttäjä1’ kirjautuu ulos Traceback (most recent call last): ... Exception: Tapahtui virhe
Harjoitukset
muokkaaJohdanto: | |
---|---|
Tietotyypit ja tietorakenteet: |
Luvut - Merkkijonot - Lista - Monikko (tuple) - Sanakirja - Joukko (set) |
Ohjausrakenteet | |
Muut kielen rakenteet: |
Moduuli - Luokka - Funktio - Virheidenhallinta - Tiedosto |
Graafinen käyttöliittymä: | |
Harjoitustehtäviä: | |
Lisätiedot ja lähteet: |