Kirjautuminen

Haku

Tehtävät

Koodit: Python: Päiväkirjaluokka

Kirjoittaja: L2-K2

Kirjoitettu: 05.01.2008 – 05.01.2008

Tagit: ohjelmointitavat, koodi näytille, vinkki

Yksinkertainen päiväkirjaluokka toteutettuna pythonilla.

Käyttää hyväkseen monia pythonin standardikirjaston luokkia pickle (datarakenteen tallentaminen ja avaaminen) ja time (kellonajat).

Toimii samalla myös esimerkkinä luokista, poikkeustilojen hallinnasta ja pythonin "erilaisesta" syntaksista.

#!/usr/bin/python
# -*- coding: iso-8859-15 -*-

import pickle, time

# geneerinen luokka päiväkirjalle
class Diary():
    location = ""
    content = []
    date = 0
    header = 1
    message = 2

    # luokan konstruktori, jolle kerrotaan päiväkirjan tallennustiedosto
    # sekä se, että onko päiväkirja jo olemassa
    def __init__(self, location, create_new):
        self.location = location
        if not create_new:
            if not self.__load():
                print "The program couldn't open your diary"
        return

    # lataa päiväkirjan käyttäen pickle-moduulia
    def __load(self):
        try:
            file = open(self.location, "r")
            self.content = pickle.load(file)
            file.close()
            return 1
        except IOError, (number, string):
            print "IO error %s: %s" % (number, string)
        except:
            print "General error: %s" % (sys.exc_info()[0])
        return 0

    # tallentaa päiväkirjaan tehdyt muutokset
    def save(self):
        try:
            file = open(self.location, "w")
            pickle.dump(self.content, file)
            file.close()
            return 1
        except:
            print "General error: %s" % (sys.exc_info()[0])
        return 0

    # uuden "sivun" lisääminen
    def add(self, header, message):
        try:
            return self.content.append([time.time(), header, message])
        except:
            print "General error: %s" % (sys.exc_info()[0])
        return 0

    # sivun muokkaus, lisää aikaleiman
    def edit(self, index, header, message):
        try:
            self.content[index][1] = header
            self.content[index][2] = message
            self.content[index].append(time.time())
            return self.content[index]
        except IndexError:
            print "Index error, index out of range"
        except:
            print "General error: %s" % (sys.exc_info()[0])
        return 0

    # poistaa sivun
    def remove(self, index):
        try:
            return self.content.pop(index)
        except IndexError:
            print "Index error, index out of range"
        except:
            print "General error: %s" % (sys.exc_info()[0])
        return 0

    # "lukee" sivu käyttäjälle
    def read(self, index):
        try:
            return self.content[index]
        except IndexError:
            print "Index error, index out of range"
        except:
            print "General error: %s" % (sys.exc_info()[0])
        return

    # palauttaa päiväkirjan sisällön käyttäjälle
    def index(self):
        return self.content

# tämän lisäksi tarvitaan rajapinta,
# joka manipuloi luokan tulosteen ulkoasua (esim. kellonajat UNIX->human)
# ja vastaanottaa käyttäjän syötteitä ohjatakseen päiväkirjaa
# esimerkki käytöstä (ilman rajapintaa), tulosteet raakamuodossa

# luodaan _uusi_ päiväkirja
diary = Diary("diary001.dat", 1)
# lisätään merkintöjä, luokka lisää niihin aikaleiman itsenäisesti
diary.add("Lorem ipsum", "Lorem ipsum dolor sit amet?")
diary.add("Lorem ipsum1", "Lorem ipsum dolor sit amet.")
# poistetaan viimeinen merkintä
diary.remove(-1)
# pyydetään ensimmäinen merkintä
print diary.read(0)
# tallennetaan muutokset
diary.save()
# tuhotaan instanssi, python vapauttaa muistin
del diary

# _avataan_ päiväkirja uudelleen
diary = Diary("diary001.dat", 0)
# lisätään merkintä
diary.add("Mauris pellentesque", "Mauris pellentesque tempor auctor nulla.")
# listataan kaikki merkinnät
print diary.index()
# käydään muuttamassa 1. merkintää (?->,)
diary.edit(0, "Lorem ipsum", "Lorem ipsum dolor sit amet,")
# käydään muuttamassa 1. merkintää (,->.)
diary.edit(0, "Lorem ipsum", "Lorem ipsum dolor sit amet.")
# katsotaan korjattua merkintää, huomioi muutosten ajankohdan kirjaus
print diary.read(0)
# tallennetaan muutokset
diary.save()
# tuhotaan instanssi
# python vapauttaa luokan varaaman muistin automaattisesti
del diary

Kommentit

Metabolix [06.01.2008 18:14:42]

#

Tämäpä onkin mukavan yksinkertainen ja selkeä esimerkki luokkien käytöstä, en tähän hätään keksi yhtään mitään huomautettavaa. Mutta mikähän kohta tuossa mahtoi olla säännöllisiä lausekkeita?

L2-K2 [06.01.2008 18:34:36]

#

Metabolix kirjoitti:

Tämäpä onkin mukavan yksinkertainen ja selkeä esimerkki luokkien käytöstä, en tähän hätään keksi yhtään mitään huomautettavaa. Mutta mikähän kohta tuossa mahtoi olla säännöllisiä lausekkeita?

Ähh.. pitää muokata, karsin sen tästä versiosta pois haun, koska se oli turhan monimutkainen.

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta