Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Getterien ja Setterien Käyttö | Kapselointi
Olio-ohjelmointi Pythonissa

bookGetterien ja Setterien Käyttö

Pyyhkäise näyttääksesi valikon

Ominaisuudet sekä getterit/setterit mahdollistavat hallitun pääsyn luokan tietoihin, muuttaen yksinkertaisen attribuutin käytön tehokkaiksi, validoiduiksi ja lasketuiksi vuorovaikutuksiksi. Ne yhdistävät suoran attribuutin käytön ja metodiin perustuvan kontrollin, tarjoten sekä luettavuutta että vankkuutta.

Pythonin ominaisuudet hyödyntävät taustalla deskriptoriprotokollaa. Tämä mahdollistaa sen, että @property-koristeella varustetut metodit käyttäytyvät kuin attribuutit, mutta suorittavat silti mukautettua logiikkaa.

12345678910111213141516171819202122
class Temperature: def __init__(self, celsius): self._celsius = celsius @property def celsius(self): return self._celsius @celsius.setter def celsius(self, value): if -273.15 <= value <= 1e4: # validation self._celsius = value else: raise ValueError("Invalid temperature") @property def fahrenheit(self): return (self._celsius * 9/5) + 32 t = Temperature(25) print(t.fahrenheit) # Computed property t.celsius = -300 # Raises ValueError
copy

Ammattilaiskäytännöt sisältävät laiskan evaluoinnin raskaille laskutoimituksille, välimuistin usein käytetyille arvoille, selkeät virheilmoitukset validointiin sekä kattavan dokumentaation ominaisuuden toiminnasta. Ominaisuuksien tulisi tuntua luonnollisilta attribuuteilta, mutta tarjota silti metodien kontrolli.

Suorituskykytekijät ovat tärkeitä usein käytetyille ominaisuuksille. Yksinkertaisilla gettereillä/settereillä on minimaalinen vaikutus suorituskykyyn, mutta monimutkainen validointi tai raskas laskenta voi heikentää suorituskykyä. Tällöin välimuisti, laiska evaluointi ja tehokkaat algoritmit ovat olennaisia.

Valinta ominaisuuksien ja perinteisten getterien/setterien välillä riippuu tarpeista: ominaisuudet tarjoavat selkeämmän syntaksin ja noudattavat Pythonin käytäntöjä, kun taas eksplisiittiset metodit voivat olla parempia monimutkaiseen validointiin tai metodipohjaisiin rajapintoihin.

question mark

Mikä etu Pythonin ominaisuuksilla (properties) on perinteisiin getter- ja setter-metodeihin verrattuna?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 3

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

Osio 5. Luku 3
some-alt