Olioiden säilöminen tietorakenteisiin

Oliot ovat jo itsessään kätevä tapa tietojen säilömiseksi. Olioita voi edelleen säilöä myös muihin tietorakenteisiin kuten listoihin tai sanakirjoihin. 

Oliot listoissa

Tarkastellaan Molekyyli-luokkaan perustuvaa esimerkkiä:

class Molekyyli:
    maara = 0
    def __init__(self, kaava, moolimassa):
        Molekyyli.maara += 1
        self.kaava = kaava
        self.moolimassa = moolimassa
     
    def laske_ainemaara(self, massa):
        return massa / self.moolimassa

metaani = Molekyyli("CH4", 16.04)
etaani = Molekyyli("C2H6", 30.07)
propaani = Molekyyli("C3H8", 44.10)
butaani = Molekyyli("C4H10", 58.12)

lista_olioista = [metaani, etaani, propaani, butaani]

print(f"Olet luonut {Molekyyli.maara} molekyyliä:")
for hiilivety in lista_olioista:
    print(hiilivety.kaava)

Esimerkki tulostaa:

Olet luonut 4 molekyyliä:
CH4
C2H6
C3H8
C4H10

Olioista koostuva lista on erittäin kätevä tapa korvata aiemmin kurssilla käytetyt rakenteet, joissa listojen sisään on säilötty toisia listoja:

lista_listoista = [["CH4", 16.04],
                   ["C2H6", 30.07],
                   ["C3H8", 44.10],
                   ["C4H10", 58.12],
                  ]
print(f"Listassa on {len(lista_listoista)} molekyyliä:")
for hiilivety in lista_listoista:
    print(hiilivety[0])

Olioita sisältävät listat ovat joustava tietorakenne, koska luokkaan on helppo lisätä uusia kenttiä, eikä se vaikuta mitenkään listan määrittelyyn tai indeksointiin. Olioiden sisältämiin tietoihin on helppo viitata, koska olion kentillä on selkeä nimi. Sen sijaan listojen tapauksessa pitää aina muistaa, mikä indeksi vastasi mitäkin tietoa.

Oliot sanakirjoissa

Luodaan sanakirja, jonka avaimena on hiilivedyn nimi ja arvona Molekyyli-luokan olio:

class Molekyyli:
    maara = 0
    def __init__(self, kaava, moolimassa):
        Molekyyli.maara += 1
        self.kaava = kaava
        self.moolimassa = moolimassa
     
    def laske_ainemaara(self, massa):
        return massa / self.moolimassa

sanakirja_olioista = {}
sanakirja_olioista["metaani"] = Molekyyli("CH4", 16.04)
sanakirja_olioista["etaani"] = Molekyyli("C2H6", 30.07)
sanakirja_olioista["propaani"] = Molekyyli("C3H8", 44.10)
sanakirja_olioista["butaani"] = Molekyyli("C4H10", 58.12)

print(f"Olet luonut {Molekyyli.maara} molekyyliä:")
for avain, hiilivety in sanakirja_olioista.items():
    print(f"{avain} eli {hiilivety.kaava}")

Esimerkki tulostaa:

Olet luonut 4 molekyyliä:
metaani eli CH4
etaani eli C2H6
propaani eli C3H8
butaani eli C4H10