Seite 1 von 1

Anfängerproblem: Fehlermeldung " 'str' object is not callable"

Verfasst: Sonntag 10. April 2022, 12:14
von Bloodpython
Hi, und erstmal vielen Dank für die Aufnahme ins Forum.
Ich programmiere jetzt seit 4-5 Tagen Python über jupyterlab und folge dabei einem Beginnerkurs. Ich habe dabei einen Code m.E. 1:1 übernommen, allerdings erhalte ich, im Gegensatz zum Video, eine Fehlermeldung. Die meisten Einträge bei google und im Forum überschreiten meinen Wissenshorizont, weswegen ich dabei wenig Hilfe gefunden habe. Hoffentlich könnt ihr mir helfen.
Generell geht es bei der Übung um Vererbung

Code: Alles auswählen

class Mannschaft():

    def __init__(self, dachverband, name):

        self.dachverband = dachverband

        self.name = name

    def name(self):

        return self.dachverband  + self.name

class MR_Mannschaft(Mannschaft):

    def __init__(self, dachverband, name, adresse):

        super().__init__(dachverband, name)

        self.adresse = adresse

       

    def name(self):

        return self.dachverband + " " + self.name + " " + self.adresse



holsatia = Mannschaft("Kösener Verband", "Corps Holsatia")   

bsc = MR_Mannschaft("BSCC", "BSC", "BSC-Straße")



print(bsc.name())


Daraus folgt diese Fehlermeldung

Code: Alles auswählen

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-fe7859720540> in <module>
----> 1 print(bsc.name())

TypeError: 'str' object is not callable
Ich verstehe nicht, warum das Video keinen Fehler bekommt, ich allerdings schon.

Re: Anfängerproblem: Fehlermeldung " 'str' object is not callable"

Verfasst: Sonntag 10. April 2022, 12:47
von __deets__
self.name überschreibt dir deine Methode name, daher der Fehler.

Das ist allerdings auch spektakulär schlechter Code insgesamt, wenn das da so steht, selbst ohne den Fehler. Den Kurs würde ich eher abbrechen & zb das offizielle Python Tutorial durcharbeiten.

Re: Anfängerproblem: Fehlermeldung " 'str' object is not callable"

Verfasst: Sonntag 10. April 2022, 12:48
von Sirius3
Methoden dürfen nicht so heißen wie Attribute, denn sonst werden die durch letztere verdeckt.
Es ist auch komisch, warum ein Name die Adresse enthält.
Statt dessen würde man die Methode __str__ implementieren.

Re: Anfängerproblem: Fehlermeldung " 'str' object is not callable"

Verfasst: Sonntag 10. April 2022, 12:59
von __blackjack__
In der `Mannschaft.__init__()` fehlt der Aufruf der `__init__()` per `super()`. Wenn man das so macht, muss man das überall so machen.

Bei `Mannschaft.name()` wird kein Leerzeichen zwischen die beiden Informationen gesetzt.

Werte und Zeichenketten mit ``+`` zusammenstückeln ist eher BASIC denn Python. In Python gibt es Zeichenkettenformatierung mit der `format()`-Methode und f-Zeichenkettenliterale.

Man benutzt keine kryptischen Abkürzungen in Namen. Was soll das `MR` in `MR_Mannschaft` bedeuten?

`MR_Mannschaft.name()` wiederholt einen Teil Code der schon in `Mannschaft.name()` steht. Da würde man diese Methode aufrufen, statt den Code zu wiederholen.

Code: Alles auswählen

#!/usr/bin/env python3


class Mannschaft:
    def __init__(self, dachverband, name):
        self.dachverband = dachverband
        self.name = name

    def __str__(self):
        return f"{self.dachverband} {self.name}"

#
# TODO Name ohne Abkürzung.
#
class MR_Mannschaft(Mannschaft):
    def __init__(self, dachverband, name, adresse):
        Mannschaft.__init__(self, dachverband, name)
        self.adresse = adresse

    def __str__(self):
        return f"{Mannschaft.__str__(self)} {self.adresse}"


def main():
    holsatia = Mannschaft("Kösener Verband", "Corps Holsatia")
    bsc = MR_Mannschaft("BSCC", "BSC", "BSC-Straße")

    print(holsatia)
    print(bsc)


if __name__ == "__main__":
    main()