You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Polymorfismi tarkoittaa, että sama toiminto toimii useille erilaisille tyypeille. Tämä toteutuu Pythonissa helposti, koska kieli on dynaaminen. Staattisessa kielessä joutuisi tekemään erityyppisille tyypeille eri funktiot käytännössä saman asian tekemiseksi.
 
Esimerkiksi tässä on funktio Swap, joka ottaa parametreiksi kaksi muuttujaa ja vaihtaa niiden arvot.

 def Swap(a, b):
    return b, a
 
input("Paina Enter näppäintä lopettaaksesi...")

Funktio toimii kaikille muuttuja tyypeille - itse asiassa toimii, vaikka parametrit a ja b olisivat eri tyyppiä, koska muuttujat vain palautetaan paluuarvossa ja sijoitetaan muuttujiin eri järjestyksessä. Sen sijaan tehtäessä tiettyjä operaatioita parametreille niin virheitä saattaa tulla, jos annetun parametrin tyyppi ei ole yhteensopiva operaation kanssa. Tässä toinen funktio Multi, joka käyttää kertolasku operaattoria saamilleen parametreille ja palauttaa tuloksen.

def Add(a, b):
    return a + b
 
input("Paina Enter näppäintä lopettaaksesi...")

Tämä funktio toimii vain esimerkiksi kahdelle numeeriselle muuttujalle tai, kun a on lista, monikko tai merkkijono ja b numero. Operaattorien lisäksi sama pätee metodien käyttämiselle.
 
Mahdolliset virheet synyvät vasta ohjelmaa ajettaessa syötettäessä väärän tyyppisiä muuttujia johtuen Pythonin dynaamisuudesta. Staattisissa käännettävissä kielissä (kuten C) virhe tulisi käännösvaiheessa. IDLE-ympäristössä ennen ohjelman varsinaista ajamista virheitä voi tulla vain kielen syntaksissa olevista virheistä kuten sisennyksistä.
 
Normaalisti riittää dokumentoida funktion käyttö tapa niin että on selvää, minkä tyypin muuttujia funktiolle tulisi syöttää parametreiksi. Tämä onnistuu hyvin dokumentaatio merkkijonoilla.
 
Jos on tarvettaa mukauttaa funktion toimintaa annettujen muuttuja tyyppien mukaan, niin tätä varten Pythonissa on sisäänrakennettuja funktioita muuttujien tyypin tarkastamista varten. Funktio isinstance ottaa kaksi parametriä, joista ensimmäinen on mikä tahansa muuttuja ja toinen muuttujan tyypin tai luokan tunniste tai useamman sisältävä monikko; paluuarvo kertoo onko muuttuja jokin määritellyistä tyypeistä. Tässä esimerkki edellämainitun funktion käytöstä.

def Sum(a):
    sum = 0.0
    if isinstance(a, (int, float, complex)):
        sum = a
    elif isinstance(a, (tuple, list)):
        for i in a:
            sum += i
    return sum
     
 
input("Paina Enter näppäintä lopettaaksesi...")

Funktio Sum tarkastaa ensin onko annettu muuttuja jokin numeerisista muuttujista ja palauttaa vain sen, jos niin on. Jos parametri sen sijaan on lista tai monikko, niin alkiot käydään yksitellen läpi ja tulostetaan niiden summa - joka onnistuu vain jos yhteenlasku operaattori toimii.

  • No labels
You must log in to comment.