HUOM! Voit itse lisätä ja muuttaa sisältöä muokkaa-painikkeiden avulla

 Olet itse vastuussa tämän teoksen käytöstä aiheutuvista vahingoista Lue lisää.

Python oliot

Kohteesta Wikikko - kansan taitopankki
Siirry navigaatioon Siirry hakuun

Yleistä[muokkaa]

Pääsivu: Python

Olio-ohjelmointi. Luokka on rakenteinen tietotyyppi. Olio luodaan luokassa määritellyn ohjeen mukaan eli olio on luokan ilmentymä.

  • Esimerkki:
  • Korvaaminen, monimuotoisuus, periytyminen, piilotus.

Rakenne[muokkaa]

1. luokan nimi
2. attribuutit eli jäsenmuuttujat
3. metodit eli jäsenfunktiot

Luokka (class)[muokkaa]

  • luokka eli olion tyyppi, olion rakennusohje
  • rakennusohje kirjoitetaan koodina
  • ajettaessa ensimmäisen kerran luodaan yksi rakenne per luokka JA yksi rakenne per olio, jonka jälkeen rakenteita eli oloita tarvittava määrä
class Luokannimi:

Olio (object)[muokkaa]

  • olio sisältää jäsenmuuttujia (attribuutteja, attribute, kenttä, field) ja jäsenfunktioita (metodeja, method, operaatio, operation)
  • olio voi kutsua toisen olion jäsenfunktioita
  • oliot sijaitsee tietokoneen muistissa ja poistettaessa vapauttaa muistia
uusiolio = Luokannimi()   # luodaan uusiolio joka perustuu Luokannimeen. Tämä on yläluokka.
uusiolionimi = Luokannimi(jokuarvo):

Olioiden käyttäminen[muokkaa]

olionnimi.jasenfunktio(jokuarvo)   # asetetaan oliolle nimeltä olionimi jokuarvo sen metodissa jasenfunktio
  • arvo voidaan hakea esimerkiksi input-käskyllä tai for-silmukalla listasta. Tämän jälkeen arvo esimerkiksi asetetaan kyseiseen olioon tai luodaan uusi olio.
muuttuja1 = input("Anna nimi")
syote = input("Anna syote")
uusiolio = Luokannimi(syote)   # luodaan uusi luokka
muuttuja1.metodinimi(uusiolio) 

Listat[muokkaa]

  • listoja voidaan käyttää olioiden kanssa eri tarkoituksiin. lista = []
  • listaa voidaan kuljettaa esimerkiksi funktioissa def funktionimi(lista):
  • listaan lisätään esimerkiksi aliohjelmassa lista.append(uusiolio) # lisää uusiolion listaan
  • listaan lisätään esimerkiksi luokkamäärittelyssä self.lista.append(muuttuja1)
# haku listasta
for i in lista:
    if i.jokuattribuutti == 0:   # haetaan lisasta jokuattribuuttien arvoista nolla-arvoa
        return(i)
print("Ei löytynyt")
return(None)

Jäsenmuuttuja l. attribuutti(member variable)[muokkaa]

  • olion jäsenmuuttuja eli self.muuttuja1 = jokuarvo
  • alustaja (initializer) __init__ eli kaksi alaviivaa kummalakin puolen. Tämä suoritetaan jokaista oliota luotaessa, ei siis tarvitse kutsua erikseen. Oliota luotaessa voidaan lähettää tähän arvoja juuri tätä kyseistä oliota koskien.
  • jäsenfunktiossa self liittyy kyseiseen jäsenfunktioon. Eli toinen self taas toiseen jäsenfunktioon
    • esim. def jasenfuntio1(self, muuttuja1)
    • esim. self.muuttuja2 = 0
# Esimerkki
class Luokannimi:
    def __init__(self):   # voidaan jättää myös pois
        self.muuttuja2 = True     # jos ei käytetä __init__, niin silloin rivi kirjoitetaan:  muuttuja2 = True
        self.muuttuja3 = 0

    def jasenfunktio1(self, muuttuja1):
        self.muuttuja2 = muuttuja1

# olion luominen ja käyttäminen
uusiolio = Luokannimi()   # luodaan UUSI olio
print(uusiolio.muuttuja2)   # tulostaa oletusarvon True
uusiolio.jasenfunktio1(False)
print(uusiolio.muuttuja2)   # tulostaa muutetun arvon False
# alustus annetulla todellisella parametrilla
class Luokannimi():
    def __init__(self,muuttuja1):
        self.muuttuja2 = muuttuja1
uusiolio = Luokannimi(10)   # luodaan uusi olio parametrilla 10
print(uusiolio.muuttuja2)   # tulostaa arvon 10

Jäsenfunktio l. metodi (member function)[muokkaa]

  • luokan aliohjelma eli def...
  • ensimmäinen parametri viittaa kutsuttavaan olioon. Eli suluissa ensimmäinen. Voi olla self tai joku itse keksitty.
class Luokannimi:
    def jasenfunktio1(self,muuttuja1):
        print(muuttuja1)
    def jasenfunktio2(self):
        print("Teksti2")
  • Jäsenfunktion kutsuminen:
uusiolio = Luokannimi()
uusiolio.jasenfunktio2()   # tulostaa Teksti2
uusiolio.jasenfunktio1("Teksti1")   # tulostaa Teksti1

Periytyminen (inheritance)[muokkaa]

  • Luokka (alaluokka, subclass) kopioi jonkun toisen luokan (yläluokka, superclass) metodit ja attribuutit. Alaluokkaan voi lisätä ominaisuuksia yläluokan metodien ja attribuuttien lisäksi.
  • Yläluokan attribuutteihin viitataan kuten alaluokan omiin.
class Alaluokka(Yläluokka):

Korvaaminen (overriding)[muokkaa]

  • Kirjoitetaan samalla tavoin kuin yläluokan metodi, mutta esimerkiksi eri metodi. Samalla tavoin tarkoittaa että kun metodi tai attribuutti kirjoitetaan koodiin samalla tavoin kuin yläluokassa, niin alaluokan attribuuttien arvot tai metodin toisenlainen käyttäytyminen on se mitä kyseissä oliossa käytetään tältä osin.
  • VAATII SELVENNYSTÄ MITEN TOIMII