Seite 1 von 1

Speialisierung einer Klasse oder Unterklasse

Verfasst: Mittwoch 17. Dezember 2008, 14:21
von Basti91
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?

Verfasst: Mittwoch 17. Dezember 2008, 14:25
von derdon
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

Verfasst: Mittwoch 17. Dezember 2008, 14:56
von Basti91
symbol sollte aus der Oberklasse ding kommen.

Verfasst: Mittwoch 17. Dezember 2008, 15:06
von numerix
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.)

Verfasst: Mittwoch 17. Dezember 2008, 15:14
von 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?