Antworte auf:  Python: Ausgabe privates Attribut nach Vererbung von Spedex
Forum:  Programmieren, moderiert von: matph

[Zur Forum-Gliederung] [Wie man Fragen beantwortet] [Themenstart einblenden]

  Alle registrierten Mitglieder können Mitteilungen schreiben.
Benutzername:
Passwort:
Nachricht-Icon:                   
                  
              
Nachricht:


 

Erledigt J


Input assistance tools (JavaScript): [Link extern intern] [MathML?] [$$?]
[fed-area] [LaTeX-inline] [LaTeX-display] [Tikz] [hide-area][show-area] [Source code [num.]][?]
 Show Preview      Write using fedgeo formula editor or Latex.

Smilies for your message:
😃 😄 😁 🙂 🙃 😉 🤗 🤫 🤔 🙄 😴 🤒 😎 😮 😲 😂
🙁 😖 😒 😐 😡 👌 👍 👎 🤢 🤧 🥵 🥶 😵 🤯 😛 😷
Optionen: Deaktiviere HTML in dieser Nachricht
Deaktiviere MATHML in dieser Nachricht. Wenn Dein Text $-Zeichen enthält, die nicht LaTeX-Formeln begrenzen.
Deaktiviere Smilies in dieser Nachricht
Zeige die Signatur (Kann in 'Mein Profil' editiert werden.)
    [Abbrechen]
 
Beachte bitte die [Forumregeln]


Themenübersicht
Spedex
Aktiv
Dabei seit: 19.03.2020
Mitteilungen: 935
Herkunft: Wien / Bayern

 Beitrag No.2, eingetragen 2021-01-20 09:38    [Diesen Beitrag zitieren]

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

Liebe Grüße
Spedex


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

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

 Themenstart: 2021-01-18 19:42    [Diesen Beitrag zitieren]

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


 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]