Verständnisfrage zu Klassen und Vererbung

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
Pascal96
User
Beiträge: 3
Registriert: Mittwoch 28. Dezember 2016, 23:19

Code: Alles auswählen

class Kunde:
    def __init__(self, kdnr, vorname, name):
        self.kdnr = kdnr
        self.vorname = vorname
        self.name = name
    def get_name(self):
        return self.vorname + " " + self.name
    def get_kdnr(self):
        return self.kdnr

class Produkt:
    def __init__(self, artnr, bezeichnung):
        self.artnr = artnr
        self.bezeichnung = bezeichnung
    def get_artnr(self):
        return self.artnr
    def get_bezeichnung(self):
        return self.bezeichnung
    
class KundeProdukt(Kunde, Produkt):        
    def kunde_produkt(self):
        return "Kunde ", x.get_kdnr(), "kaufte ", x.get_bezeichnung()
    
k1 = Kunde(1, "Peter", "Lustig")
p1 = Produkt(7662, "PC")
x = KundeProdukt()
print(kunde_produkt())
Hallo, bin neu hier und dachte könnte mir hier vielleicht mal Hilfe besorgen. Oben sieht man ja den Code, den ich einfach aus Spaß geschrieben habe. Ich würde jetzt allerdings gerne auf die zwei Klassen Kunde und Produkt gleichzeitig zugreifen, sodass man eben einen Kunden erhält, mit dem jeweiligen Produkt, welches er gekauft hat. Ich wusste nicht so ganz, wie ich vorgehen sollte, drum habe ich eine 3. Klasse erstellt, die von beiden Klassen Kunde und Produkt erbt. Ich weiß nun leider nicht, wie der Konstruktor in dieser 3. Klasse auszusehen hat, noch ob diese 3. Klasse KundeProdukt überhaupt nötig ist. Der Programmcode in KlasseProdukt ist so auch glaube ich falsch, bin ein Neuling in Python :/
Meine Frage nun also: Wie kann ich von einer Klasse auf Funktionen einer anderen(erbenden) Klasse zugreifen, sodass ich eben einen Kunden mit dem jeweiligen Produkt bekomme? Ist die 3. Klasse notwendig?

Das Programm dient lediglich dem Verständnis von Klassen und Vererbung, ich hoffe ihr könnt mir helfen :)
Zuletzt geändert von Anonymous am Donnerstag 29. Dezember 2016, 00:14, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 18331
Registriert: Sonntag 21. Oktober 2012, 17:20

@Pascal96: Du bist Dir unsicher, weil »KundeProdukt« ein seltsamer Name ist. Du solltest Dir die Frage stellen, welche Beziehung Kunde und Produkt haben. Ein Hinweis darauf bietet ja schon die Methode »kunde_produkt«. Es handelt sich hierbei um einen Einkauf. Nennen wir also »KundeProdukt« in »Einkauf« um. Jetzt ist Vererbung eine »ist«-Beziehung. Doofes aber immer wieder gerne genommenes Beispiel: ein »Auto« ist ein »Fahrzeug«. Gilt diese Beziehung hier auch? Ist ein Kunde ein Einkauf oder ist ein Produkt ein Einkauf? Nein. Ein Einkauf »hat« einen Kunden und ein Produkt, das sind also Attribute, genauso wie ein eventuelles Datum. Damit sollte klar sein, wie diese 3. Klasse aufgebaut sein sollte.
BlackJack

@Pascal96: Randbemerkung: Triviale Getter (und auch Setter) sind in Python nicht üblich. Man greift direkt auf die öffentlichen Attribute zu.
Antworten