[BLOG] Introduktion till programmering, del 8- Mer Objekt oc

I denna kategori diskuteras inlägg på blog.m.nu
Användarvisningsbild
supportM
Moderator
Inlägg: 342
Blev medlem: 20 aug 2014, 10:27
Ort: Linköping

[BLOG] Introduktion till programmering, del 8- Mer Objekt oc

Inlägg av supportM » 05 nov 2014, 13:08

Detta inlägg kommer från ett blogginlägg. För att läsa originalinlägget, klicka här »

Ännu en onsdag, och med det ett nytt avsnitt av...

Bild

Förra veckan tittade vi på Objekt, och vi ska spinna vidare lite på det spåret och titta på andra avancerade datatyper.

Ett objekt kommunicerar man med genom metoder, men i praktiken kan man säga att alla avancerade datatyper är en form av objekt även om de inte har några metoder.

I förra inlägget nämnde jag datetime-objektet i Python. Det är ett bra exempel på ett objekt, så jag tänkte att vi ska gå igenom hur vi skulle kunna göra vårt eget!

Först definierar vi attributen:

År, månad, dag, timme, minut, sekund - alla kan lagras som heltal

Och några förslag på metoder:

"lagra nuvarande tid" - hämta datum och klockslag från systemet och lagra dessa i objektet.

"lagra " - sätt ett av attributen ovan

"hämta " - hämta ett av attributen ovan

"hämta datetime" - returnerar en sträng som representerar hela objektet (såväl datum som klockslag).

"hämta månad som sträng" - returnerar en sträng som motsvarar namnet på månaden, t.ex. "Januari".



Det mesta här är relativt enkelt. Det handlar om getters och setters, som vi sett tidigare. Det som blir lite mer invecklat är "lagra nuvarande tid", "hämta datetime" och "hämta månad som sträng" eftersom dessa behöver byggas upp av beräkningar.

Källkod för de enkla bitarna:
class Datumtid:
# Konstruktor, tom än så länge men om man anropar den med "true" ska den kunna hämta in och lagra nuvarande tid från systemet.
def __init__(self, nu=false):
#if nu: hash("a") --> 1  --> 1 - "a"

"b" --> hash("b") --> 1 --> 1 - "a", "b"

Gör man så här får man fortfarande traversera en lista, men säg att vi hashar hela alfabetet och de övriga bokstäverna får hashnyckel "2", så blir det lite smidigare beräkningsmässigt att hitta den data man söker.

I vårt fall behöver vi dock inte skapa någon hash-funktion eftersom vi redan vet vilka nycklar vi har och vilken data vi vill ha ut! Därför skapar vi helt enkelt en dictionary som innehåller datan:
import datetime

class Datumtid:

_months = {
1 : "Januari",
2 : "Februari",
3 : "Mars",
4 : "April",
5 : "Maj",
6 : "Juni",
7 : "Juli",
8 : "Augusti",
9 : "September",
10 : "Oktober",
11 : "November",
12 : "December" }

# Konstruktor, om true, lagra nuvarande tid
def __init__(self, nu=False):
if nu:
date = datetime.datetime.now()
datelist = list(date.timetuple())
self._year = datelist[0]
self._month = datelist[1]
self._day = datelist[2]
self._hour = datelist[3]
self._minute = datelist[4]
self._second = datelist[5]

# SET-metoder
def setYear(self, tal):
self._year = int(tal)
def setMonth(self, tal):
self._month = int(tal)
def setDay(self, tal):
self._day = int(tal)
def setHour(self, tal):
self._hour = int(tal)
def setMinute(self, tal):
self._minute = int(tal)
def setSecond(self, tal):
self._second = int(tal)

# GET-metoder
def getYear(self):
return self._year
def getMonth(self):
return self._month
def getDay(self):
return self._day
def getHour(self):
return self._hour
def getMinute(self):
return self._minute
def getSecond(self):
return self._second

# Get-metod, string
def __str__(self):
datum = str(self._day)+" "+self._months[self._month]+" "+str(self._year)
tid = str(self._hour)+":"+str(self._minute)+":"+str(self._day)
return datum+", kl "+tid



_months[1] returnerar nu "Januari". Precis vad vi behövde! Den placeras högst upp i klassen, då det är ett attribut som ska kunna kommas åt från metoderna. I exemplet ovan har jag också justerat utskriftsfunktionen för att skriva ut månadsnamnet istället.

Nu har vi skrivit ett eget, mer invecklat objekt och använt oss av en avancerad datatyp, Dictionary!  Vi har också lärt oss hur man definierar hur ett objekt skrivs ut som sträng (__str__(self) ).

Nästa vecka spinner vi vidare lite på ämnet sökning, och tittar på sorteringsfunktioner! Håll ut ;)