Viikko 9
OHjelmoinnin JAtkokurssi
5.11.2025
Viime viikolla
Oliot ja viittaukset, kertaus
Omien luokkien kirjoittaminen
Konstruktorit, attribuutit, self
Metodit omissa luokissa
__str__ -metodi
Palautetta viikolta 8
Omat oliot tietorakenteissa
Omia olioita voi tallentaa normaalisti listaan:
Omat oliot tietorakenteissa
Metodi __str__ ei toimi listalla olevien alkoiden kanssa, sen sijaan __repr__ toimii
Näillä on kuitenkin semanttinen ero:
__str__ palauttaa olion sisällön ihmiselle luettavassa muodossa, �__repr__ muodossa, jolla voidaan luoda uusi samanlainen olio
Listaan tallennetaan viittauksia
Listaan tallennetaan viittauksia
Tämä tulee vastaan esimerkiksi silloin, kun kopioidaan lista – tämä ei tee uutta kopioita alkioista, vaan ainoastaan uuden listan, johon viittaukset on kopioitu
Jos haluaa kopioida myös listan alkiot, funktio deepcopy modulista copy on mainio apu tähän: https://docs.python.org/3/library/copy.html
Oliot parametreina
Muuttujalla self voidaan viitata olioon itseensä
Oliot attribuutteina
Olioita voidaan tallentaa toisten olioiden sisään
None eli tyhjä viittaus
Avainsanalla None voidaan merkitä viittaus "ei mihinkään"
Kapseloinnista
Luokka tarjoaa asiakkaalle palveluita, jotta
Attribuuttien piilottaminen
Luokka voi piilottaa attribuutit asiakkaalta
Tämä tapahtuu kirjoittamalla attribuutin nimen eteen kaksi viivaa
Esimerkiksi
Asetus- ja havainnointi
Piilotettuja attribuutteja varten asiakkaalle voidaan tarjota asetus- ja havainnointimetodit
Huomaa, että kaikille attribuuteille ainakaa molempia ei välttämättä ole tarpeen tarjota
Havainnointimetodi
Merkitään @property-annotaatiolla
Havainnointimetodi pitää esitellä ennen (mahdollista) asetusmetodia
Esimerkki
Asetusmetodi
Asetusmetodi merkitään annotaatiolla @muuttuja.setter, esim:
Koska asetus- ja havainnointimetodit?
Asetus- ja havainnointimetodit tarjotaan kun halutaan mahdollistaa asiakkaalle suora mutta suojattu pääsy attribuutteihin
Usein voidaan käyttää myös muunlaisia metodeita, esim. silloin kun ei haluta antaa tietorakennetta suoraan asiakkaan käsiteltäväksi
Metodien näkyvyys
Kaksi alaviivaa metodin nimen edessä piilottaa myös metodin asiakkaalta
Kutsuessa pitää käyttää self-muuttujaa
Staattiset piirteet
Luokan piirteitä kutsutaan staattisiksi piirteiksi, näitä ovat siis
Staattinen muuttuja
Luokkamuuttujaa voi käyttää ilman että luodaan oliota luokasta
Staattinen metodi
Luokkametodi merkitään annotaatiolla @classmethod, ja sen ensimmäinen (tai ainoa) parametri on aina cls
Luokkametodia kutsutaan luokan nimen avulla:
LuokanNimi.metodi()
Esimerkiksi
Ensi viikolla
Luokkahierarkiat, perintä
Lisää näkyvyysmääreitä
Operaattoreiden ylikuormitus
Omien luokkien iterointi