Speialisierung einer Klasse oder Unterklasse

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
Basti91
User
Beiträge: 53
Registriert: Samstag 15. Dezember 2007, 11:50
Wohnort: Saarland

Speialisierung einer Klasse oder Unterklasse

Beitragvon Basti91 » Mittwoch 17. Dezember 2008, 14:21

Hallo, hab ein Problem mit Unterklassen.
Mein Programm lautet folgendermaßen:

Code: Alles auswählen

class Ding:
    dichte = {"Fe": 7.8 , "Au":19.32 , "Ag": 10.5}

    def __init__(self,volumen,symbol):
        self.volumen = float(volumen)
        self.symbol = str(symbol)
       

    def getMasse(self):
        self.masse = self.dichte[self.symbol]*self.volumen
        return self.masse
    def getVolumen(self):
        return self.volumen
    def __str__(self):
        return "Das Ding besteht aus"+str(self.symbol)+" und hat ein Volumen von"+str(self.volumen)+"cm³ ."
       

class Quader(Ding):
    def __init__(self,laenge,breite,hoehe):
        Ding.__init__(self,0,symbol)
        self.laenge = float(laenge)
        self.breite = float(breite)
        self.hoehe = float(hoehe)
        self.volumen = self.hoehe*self.breite*self.laenge

    def __str__(self):
        return "Der Quader besteht aus"+str(self.symbol)+" und hat ein Volumen von"+self.volumen+"."


Wenn ich nun die Unterklasse aufrufe bekomme´ich eine Fehlermeldung, dass "symbol" nicht definiert wäre.
Kann mir jemand helfen?
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Beitragvon derdon » Mittwoch 17. Dezember 2008, 14:25

Wo soll die Variable `symbol` aus Zeile 20 denn herkommen? Getter brauchst du in Python nicht. [wiki=String-Formatter]String-Formatter[/wiki] sind eine schöne Sache.

Edit: Typo
Zuletzt geändert von derdon am Mittwoch 17. Dezember 2008, 15:07, insgesamt 1-mal geändert.
Benutzeravatar
Basti91
User
Beiträge: 53
Registriert: Samstag 15. Dezember 2007, 11:50
Wohnort: Saarland

Beitragvon Basti91 » Mittwoch 17. Dezember 2008, 14:56

symbol sollte aus der Oberklasse ding kommen.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Mittwoch 17. Dezember 2008, 15:06

Basti91 hat geschrieben:symbol sollte aus der Oberklasse ding kommen.


Das Attribut .symbol wird doch erst in der __init__()-Methode von Ding angelegt. Vorher existiert es nicht. Du versuchst aber, es schon als Argument beim Aufruf dieser Methode zu verwenden. Das kann nicht funktionieren.
(Es würde auch dann nicht funktionieren, wenn du statt symbol - was ein lokaler Bezeichner ist und mit dem Attribut von Ding gar nichts zu tun hat - self.symbol an dieser Stelle schreiben würdest.)
BlackJack

Beitragvon BlackJack » Mittwoch 17. Dezember 2008, 15:14

@Basti91: Aus `Ding` kann `symbol` aber nicht *kommen*, denn dort wird es ja von aussen *erwartet*. Wenn ich einfach so einen `Quarder` erstelle, aus welchem Material soll der denn sein? Und wo steht das?

Wer ist online?

Mitglieder in diesem Forum: Google [Bot]