1 svar
211 visningar
wilda 19 – Fd. Medlem
Postad: 20 apr 2017 16:06 Redigerad: 20 apr 2017 16:07

Printa en lista från klass

Hej. jag har en klass med kundkonton. Informationen om varje kundkonto (kopplat till namnet som self) innehåller bland annat en lista med historik. När jag stänger av programmet så ska all information sparas på en fil. Hur gör jag för att spara allas historik på filen.

Konton är en dict som allas Namn; Bilstorlek, regnummer, senaste ankomsttid, senaste avgångstid sparas i

class Konto:
    def __init__(self, namn, bil_storlek, reg_nummer, ankomsttid="", avgångstid=""):
    self.namn = namn
    self.bil_storlek = bil_storlek
    self.reg_nummer = reg_nummer
    self.kostnad = ""
    self.ankomsttid = ankomsttid
    self.avgångstid = avgångstid
    self.historik = []

 

def skriv_på_fil(konton):  # Ligger inte i klassen
    fil = open("konton.txt", "w", encoding="utf-8")
    for keys, values in konton.items():
        fil.write(str(keys) + ";" + str(values) + ";" + str(keys.historik))
    fil.close()

 

Men jag får felkoden:
fil.write(str(keys) + ";" + str(values) + ";" + str(keys.historik))
AttributeError: 'str' object has no attribute 'historik'

annlu 230
Postad: 21 apr 2017 15:27

Exakt hur ser din dictvariabel konton ut? Utan att veta det är det svårt att hjälpa dig. Som du skriver din kod, med keys.historik, verkar det som att du vill spara dina kontoobjekt som keys i konton . Om jag använder din kod och skapar tre konton och stoppar in dem i en dict skulle det kunna se ut så här:

konto1 = Konto("namn1", "bil_storlek1", "reg_nummer1")
konto2 = Konto("namn2", "bil_storlek2", "reg_nummer2")
konto3 = Konto("namn3", "bil_storlek3", "reg_nummer3")

# Skapar dict 'konton' med objekten ovan som keys och påhittat stringvärde för value:
konton = {konto1: "value1", konto2: "value2", konto3: "value3"}

På detta sätt fungerar din kod perfekt även om utskriften till "konton.txt" blir ful med referenser till objekten (är det så du ville ha det?) Jag har inte fyllt historik med något så de skrivs ut som de tomma listor de är från början: [].

<__main__.Konto object at 0x028B4710>;value1;[]<__main__.Konto object at 0x028EFF50>;value2;[]<__main__.Konto object at 0x028EFF90>;value3;[]

Ditt felmeddelande tyder dock på att du har strings som keys i din dict. Kanske något i stil med det nedan, med dina kontoobjekt som values istället för keys?:

konton = {"konto1": konto1, "konto2": konto2, "konto3": konto3}

Det ovan ger upphov till felmeddelandet eftersom keys är strings och inte objekt med referenser till variabler.

 

Hur som helst så gissar jag bara. Sitter du fortfarande fast kan du ju visa exakt hur du bygger upp din dict 'konton' och förklara vad det är du vill ha utskrivet till din fil så ska vi nog kunna hitta rätt.

Svara
Close