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
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?
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.