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.
Antworten
Benutzeravatar
Basti91
User
Beiträge: 53
Registriert: Samstag 15. Dezember 2007, 11:50
Wohnort: Saarland

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

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

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

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

@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?
Antworten