Forum:  Programmieren
Thema: Python: Ausgabe privates Attribut nach Vererbung
Themen-Übersicht
Spedex
Aktiv
Dabei seit: 19.03.2020
Mitteilungen: 935
Herkunft: Wien / Bayern
Themenstart: 2021-01-18 19:42

Hallo, folgender Code:
Python
class Haus:
    Anzahl_Haus = 0
    def __init__(self, Adresse, Hoehe, Etagenanzahl):
        self.__Adresse = Adresse
        self.Hoehe = Hoehe
        self.Etagenanzahl = Etagenanzahl
        Haus.Anzahl_Haus += 1
 
    def get_Adresse(self):
        return(self.__Adresse)
 
    def __str__(self):
        return(f"Adresse: {self.__Adresse}, Höhe: {self.Hoehe}, Etagenanzahl: {self.Etagenanzahl}")
 
    def __lt__(self, other):
        return(self.Hoehe < other.Hoehe)
 
class Wolkenkratzer(Haus):
    Anzahl_Wolkenkratzer = 0 
    def __init__(self, Adresse, Hoehe, Etagenanzahl, Name):
        self.Name = Name
        Haus.__init__(self, Adresse, Hoehe, Etagenanzahl)
        Wolkenkratzer.Anzahl_Wolkenkratzer += 1
 
    def __str__(self):
        return(f"Name: {self.Name}, Adresse: {self.__Adresse} \
               Hoehe: {self.Hoehe}, Etagenanzahl: {self.Etagenanzahl}")

Man sieht, dass die Klasse Wolkenkratzer von der Klassen Haus erbt. In beiden Klasse befindet sich die Methode __init__. Doch die Ausgabe der Adresse mittels print(Klasse) funktioniert nur bei der Haus, jedoch nicht bei Wolkenkratzer. Wenn ich die Adresse bei Wolkenkratzer ausgeben möchte, muss ich anstelle von self.__Adresse self.get_Adresse() schreiben.
Meine Frage: Wieso ist das so, wieso funktioniert es bei der einen Klasse schon und bei der anderen (vererbten) Klasse nicht?

Liebe Grüße
Spedex


DerEinfaeltige
Senior
Dabei seit: 11.02.2015
Mitteilungen: 2764
Beitrag No.1, eingetragen 2021-01-20 09:24

Das private Attribut heißt (extern) nicht __Adresse, sondern _Haus__Adresse.
Python
class Haus:
    Anzahl_Haus = 0
    def __init__(self, Adresse, Hoehe, Etagenanzahl):
        self.__Adresse = Adresse
        self.Hoehe = Hoehe
        self.Etagenanzahl = Etagenanzahl
        Haus.Anzahl_Haus += 1
 
    def get_Adresse(self):
        return(self.__Adresse)
 
    def __str__(self):
        return(f"Adresse: {self.__Adresse}, Höhe: {self.Hoehe}, Etagenanzahl: {self.Etagenanzahl}")
 
    def __lt__(self, other):
        return(self.Hoehe < other.Hoehe)
 
class Wolkenkratzer(Haus):
    Anzahl_Wolkenkratzer = 0 
    def __init__(self, Adresse, Hoehe, Etagenanzahl, Name):
        self.Name = Name
        Haus.__init__(self, Adresse, Hoehe, Etagenanzahl)
        Wolkenkratzer.Anzahl_Wolkenkratzer += 1
 
    def __str__(self):
        return(f"Name: {self.Name}, Adresse: {self._Haus__Adresse} \
               Hoehe: {self.Hoehe}, Etagenanzahl: {self.Etagenanzahl}")
 
 
H = Haus("Schlangengrube 9", 12, 3)
W = Wolkenkratzer("Wolke 7", 120, 30, "Turm von Hanoi")
print(H)
print(W)
 
 


Spedex
Aktiv
Dabei seit: 19.03.2020
Mitteilungen: 935
Herkunft: Wien / Bayern
Beitrag No.2, vom Themenstarter, eingetragen 2021-01-20 09:38

Ah, ok.
Gut, danke für die Erklärung!

Liebe Grüße
Spedex




Dieses Forumbeitrag kommt von Matroids Matheplanet
https://https://matheplanet.de

Die URL für dieses Forum-Thema ist:
https://https://matheplanet.de/default3.html?topic=251814=5101
Druckdatum: 2021-04-23 04:12