Sida 1 av 1

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

Postat: 01 feb 2015, 10:06
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?

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

Postat: 01 feb 2015, 23:47
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...

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

Postat: 03 feb 2016, 20:03
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