Python och klasser, lär mig hjälp önskas!

Här diskuteras programmering och utveckling
Användarvisningsbild
ZerQ
Inlägg: 160
Blev medlem: 01 aug 2007, 08:40
OS: Annat GNU/Linux
Ort: Ornsköldsvik
Kontakt:

Python och klasser, lär mig hjälp önskas!

Inlägg av ZerQ »

Hej
Jag har definierat en klass Person som skall ta 3 värden, förnamn, efternamn och adress. Dessa sparas sedan i en lista så att jag kan skapa flera instanser av samma klass. Om jag skriver ut denna lista på en gång så fungerar det korrekt.

Kod:

Kod: Markera allt

# class definitions
class Person(object): # Class for Person object
    '''class for handling a person object with first, sure name and adress'''

    def __init__(self, fName, sName, adress):
        self.fName = fName
        self.sName = sName
        self.adress = adress

    def getForName(self):
        return self.fName

    def getSurName(self):
        return self.sName

    def getAdress(self):
        return self.adress

    def getPerson(self):
        return self.fName + " " + self.sName + ", " + self.adress

# Main code
lista = []
for i in range (2):
    namn = input("Förnamn: ")
    efter = input("Efternamn: ")
    adress = input("Adressen: ")
    lista.append(Person(namn, efter, adress))

for i in range (len(lista)):
    print(lista[i].getPerson())
Nu vill jag spara detta till en fil så att jag kan använda det senare. Det går bra, filen som sparas har värdena i sig om man öppnar den med nano.
Kod:

Kod: Markera allt

# Save all to a file
pif = "Person.dat"
with open(pif, "wb") as f:
    pickle.dump(lista, f)
f.close()
Nu vill jag läsa in filens innehåll och visa det i shellen, se kod
Kod:

Kod: Markera allt

with open(pif, "rb") as f:
    print(pickle.load(f))
f.close()
Då får jag upp detta...
[<__main__.Person object at 0x0000000003D28F60>, <__main__.Person object at 0x0000000003D320B8>]
Hur löser jag så att min metod getPerson() anropas så att det skrivs ut korrekt ur listan? Eller har jag missförstått pickle funktionen så att det inte går att spara en instans av klassen Person?
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

Re: Python och klasser, lär mig hjälp önskas!

Inlägg av Osprey »

Jag har alltid använt mig av typ f.read() och f.write(), pickle har jag för mig att det mer har att göra med att spara hela objektet istället för att spara någon specifik data...
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Användarvisningsbild
BadOmen
Inlägg: 1172
Blev medlem: 18 aug 2006, 10:45
OS: Kubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Umeå

Re: Python och klasser, lär mig hjälp önskas!

Inlägg av BadOmen »

Så här kan du komma åt din data.

Kod: Markera allt

with open(pif, "rb") as f:
    lstOfPersons = pickle.load(f)

#print(lstOfPersons[0].getPerson())
for pers in lstOfPersons:
    print(pers.getPerson())
EDIT: Såg just att jag var ett år försen med svaret ;D
Betygsätt din Hårdvara och underlätta inköp av ny för andra:http://ubuntu-se.org/phpBB3/viewforum.php?f=138
Ubuntu-se forsknings team, här.
Min Ubuntu blogg som funkar som en stor post-it lapp för mig http://attminnas.blogspot.com/
Skriv svar

Återgå till "Programmering och webbdesign"