Verständnisfrage bei Klassen

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
Bindl
User
Beiträge: 70
Registriert: Donnerstag 27. Oktober 2016, 11:48

Hi zusammen,

ich habe ein paar Klassen und rufe diese per Funktion auf.
Die Ausgabe verwundert mich jedoch etwas.

Hier mal der Quelltext:

Code: Alles auswählen

class A:
    def func(self):
        print("A::func()")

    def gulb(self, x):
        x = x - 1
        print("x=", x)

class B(A):
    def func(self):
        print("B::func()")

class C(B):
    def gulb(self, x):
        x = x + 1
        print("x=", x)

class D(B):
    def func(self):
        print("D::func()")

def main():
    a = A()
    a.func()
    a.gulb(5)
    b = C()
    b.func()
    b.gulb(6)
    d = D()
    d.func()
    d.gulb(8)

main()
Die Ausgabe:
A::func()
x= 4
B::func()
x= 7
D::func()
x= 7

Also die Ausgabe 1 & 2 verstehe ich.

Dann würde ich eine Fehlermeldung erwarten, da b = C(). Also hat b die Funktionen (hier nur eine) inne und es gibt bei der Klasse C keine Funktion func().
Wieso wird dann die Funktion func() der Klasse B ausgeführt?

Die Klasse D hat ja keine Funktion gulb(), wieso wird dann dann keine Fehler ausgegeben und stattdessen die glub() Funktion aus der Klasse C verwendet?

Hoffe mich kann da jmd aufklären
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was glaubst du denn ist der Sinn in der Definition von C zu schreiben

Code: Alles auswählen

class C(B)
Analog fuer B.

Warum tust du das, und was ist das fuer ein Feature? Das beantwortet dann auch die Frage.
Bindl
User
Beiträge: 70
Registriert: Donnerstag 27. Oktober 2016, 11:48

Hi,
das sind nur Verständisübungen aus meiner Uni.

Heißt das das die Klasse C die eigenen Funktionen und die Funktionen der Klasse B inne hat?
Hat die Klasse C dann auch die Funktionen der Klasse A, wegen B(A) ?

Wenn ja, bedeutet das wenn man

Code: Alles auswählen

d = D()
    d.func()
hat, da erst "geguckt" wird ob die Klasse D die Funktion func() selbst hat und wenn nicht würde Sie in der Klasse B "nachgucken" , wegen D(B)?

Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt :)
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja, das heisst das.
Bindl
User
Beiträge: 70
Registriert: Donnerstag 27. Oktober 2016, 11:48

Danke
Antworten