Seite 1 von 1

Fehler bei diesem Programm

Verfasst: Freitag 25. Dezember 2015, 20:00
von PyJava
Hallo,
Ich hoffe ich bin hier im richtigen Forum.
Hab grade erst mit Python angefangen und weiß deshalb nicht was der Fehler bei diesem Programm ist.

Code: Alles auswählen

class programm():
    
    def __init__(self):
        self.x = 5
 
    def drucken(self):
        print(self.x)
    
    def main(self):
        drucken()
    
    
    if __name__ == '__main__':
        main()

Re: Fehler bei diesem Programm

Verfasst: Freitag 25. Dezember 2015, 20:11
von BlackJack
@PyJava: *Der* Fehler ist gut. Vielleicht verrätst auch was das machen soll, denn da sieht einiges falsch aus. Die ``if __name__ …``-Abfrage gehört beispielswiese nicht in die Klasse sondern auf Modulebene und ruft von dort üblicherweise eine `main()`-*Funktion* auf. Und dann müsstest Du auch erst einmal ein Exemplar vom Typ `programm` erstellen bevor Du Methoden darauf aufrufst. Ausserdem musst Du immer das Objekt angeben auf dem eine Methode aufgerufen wird. Der ``drucken()``-Aufruf in der `main()`-Methode sucht erst lokal in der Methode und dann auf Modulebene nach dem Namen `drucken` und wird den dort nicht finden. Weil Du Java in Deinem Nutzernamen hast: `self` wird da nicht auf magische Weise angenommen wie `this` bei Java. Es wird als Argument in die Methode rein gebracht und man muss darüber gehen um an Attribute von dem Objekt zu kommen auf dem die Methode aufgerufen wurde.

Re: Fehler bei diesem Programm

Verfasst: Freitag 25. Dezember 2015, 20:18
von BlackJack
Das könnte beispielsweise so aussehen:

Code: Alles auswählen

class Program(object):

    def __init__(self):
        self.x = 5

    def print(self):
        print(self.x)


def main():
    Program().print()


if __name__ == '__main__':
    main()
Wobei die Klasse hier keinen Sinn macht. Klassen mit nur `__init__()` und nur einer zusätzlichen Methode, von denen man nur ein Exemplar erstellt um diese eine Methode drauf aufzurufen und das Exemplar dann gleich wieder verwirft sind oft ein Zeichen das man eine einfache Funktion unnötigerweise in eine Klasse gesteckt hat.

Re: Fehler bei diesem Programm

Verfasst: Freitag 25. Dezember 2015, 20:22
von pillmuncher
:shock: BlackJack verwendet Python3? Ja is denn heut scho Weihnachten?

Re: Fehler bei diesem Programm

Verfasst: Freitag 25. Dezember 2015, 20:43
von PyJava
Ok vielen dank :)

Re: Fehler bei diesem Programm

Verfasst: Freitag 25. Dezember 2015, 20:50
von bwbg
@pillmuncher: Ja, BlackJack hat sich zur Feier des Tages den __future__-import geschenkt :D

Pythonisch würde ich das eingangs skizzierte Programm wie folgt schreiben:

Code: Alles auswählen

#!/usr/bin/env python3

def main():
    print(5)
    
    
if __name__ == '__main__':
    main()
PS: Für mich scheint die Code-Vorschau immer noch nicht zu funktionieren.