Klasser och arv i Python

Här diskuteras programmering och utveckling
Användarvisningsbild
Victor
Inlägg: 425
Blev medlem: 12 okt 2006, 19:08
OS: Ubuntu
Utgåva: 23.10 Mantic Minotaur
Ort: Lund

Klasser och arv i Python

Inlägg av Victor »

Hello,

Jag håller på lite med klasser och arv just nu och har ett par frågor som jag skulle vilja ha besvarade.

Jag tänkte göra en leksaksfabrik, för att lära mig. Jag tänkte först ha en klass som heter "leksak", den har de grundläggande attributen som namn och modelnummer. Därefter vill jag lägga dit "bil" som har attributen färg och cabrolé, denna ärver då ifrån "leksak". Nu vill jag skapa en bil med namn porsche :) som har värdena "röd" och "nej".

Hur ska jag skriva det? bara så ni inte tror att ja inte prövat så kommer koden som jag skrivit:

Kod: Markera allt

class leksak:
    def __init__(self, namn, modellnummer):
        self.name = namn
        self.modelNo = modellnummer
        
class bil(leksak):
    def __init__(self):
        toy.__init__(self, farg, cab)
        self.farg = farg
        self.cab = cab


class porsche(bil):
    def __init__(self):
        bil.__init__(self, "Röd", "Nej")
// So long, and thank you for all the fish

"Your Ubuntu User number is # 10448"
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

SV: Klasser och arv i Python

Inlägg av Lars »

Jag ser några fel, börjar nerifrån. För argumentet cab så passar kanske värdena True och False bättre, men _init_ för bil tar ju inga argument alls som du har skrivit, det får du ändra på.

När du anropar leksak.__init__ så sätter du namnet till "Röd" och modellnumret till "Nej", det blir ju fel. Och modellnummer känns som en typisk sak som en bil har, och inte dockor, så det passar bättre i den klassen. Ett namn har ju både bilar och dockor så det kan kanske passa bra i klassen leksak. Men du måste nog ha ett namn-argument till de andra __init__-fuktionerna också och skicka värdet vidare till klassen leksak, om du förstår vad jag menar.
Användarvisningsbild
Victor
Inlägg: 425
Blev medlem: 12 okt 2006, 19:08
OS: Ubuntu
Utgåva: 23.10 Mantic Minotaur
Ort: Lund

SV: Klasser och arv i Python

Inlägg av Victor »

Hehe, okej. Tack så mkt! Dock så är jag helt nybörjare när det gäller klasser och jag hittar inte riktigt en bra guide när det gäller klasser.. Finns det ngn chans i världen att du skulle kunna skriva om så det står rätt? Om du har den tiden så att säga :)

Jag vet inte riktigt hur den rätta syntaxen (tror det heter syntax) när det gäller klasser. Jag kan skapa arv i två steg men in i tre, som det är nu.

Tack på förhand /Victor
// So long, and thank you for all the fish

"Your Ubuntu User number is # 10448"
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

SV: Klasser och arv i Python

Inlägg av Lars »

Kanske något sådant här:

Kod: Markera allt

#!/usr/bin/python
# -*- coding: utf-8 -*-

class leksak:
    def __init__(self, namn):
        self.name = namn

class bil(leksak):
    def __init__(self, namn, farg, cab):
        leksak.__init__(self, namn)
        self.farg = farg
        self.cab = cab

class porche(bil):
    def __init__(self, modell, farg, cab):
        bil.__init__(self, "Porche", farg, cab)
        self.modell = modell


if __name__ == "__main__":
    minbil = porche("912", "Röd", False)
    print minbil.name, minbil.modell
Just designen av vilka klassar man ska ha och var olika attribut och metoder ska definieras är alltid lite knepig. Det blir alltid mer eller mindre fel vid första försöket. Men ovanstående ska väl fungera i alla fall, lek lite med koden och se vad som händer ;)
Användarvisningsbild
Galgalid
Inlägg: 1646
Blev medlem: 08 dec 2006, 12:30

SV: Klasser och arv i Python

Inlägg av Galgalid »

ja, det heter syntax ;)
Skriv svar

Återgå till "Programmering och webbdesign"