Python: print() wird nicht angezeigt?
Hallo, mache derzeit einen Python-Einsteigerkurs. Dabei ist folgender Code vorgegeben:
class Auto:
"""
Erstellt das Objekt Auto für einen Gebrauchtwagenhändler
"""
def _init_(self,ma,mo,bj,pr):
"""
Initialisiert ein neues Objekt Auto
Argumente:
Marke(string): Marke des Gebrauchtwagens Modell(string): Modell des Wagens
Baujahr(int): Baujahr des Fahrzeugs Preis(int): Preis des Fahrzeugs
"""
self.Marke= ma
self.Modell= mo
self.Baujahr= bj
self.Preis= pr
auto1= Auto("VW","Golf",2011,5000)
auto2= Auto("Renault","Clio",2013,6000)
auto3= Auto("Porsche","Panamera",2014,25000)
print(auto1.Marke,auto2.Marke,auto3.Marke)
print(auto1.Preis,auto2.Preis,auto3.Preis)
Im Tutorial erhält der Anwender eine Ausgabe in der Shell.
Bei mir läuft das Programm ohne Fehler, jedoch auch ohne print()-Ausgabe durch.
Hat irgendwer einen Tipp, wie ich das so hinkriege, damit ich eine Ausgabe erhalte?
Eventuell liegt es ja an den Einrückungen, doch da habe ich bisher versagt.
Danke!
6 Antworten
(1)
Ja, die Einrückung ist Teil der Fehlers.
Die print()-Anweisungen werden nicht ausgeführt, weil sie gar nicht aufgerufen werden. Sie stehen nämlich in der Definition von __init__, und auch __init__ wird nicht aufgerufen, weil dazu die Auto()-Anweisungen aufgerufen werden müßten, und auch die stehen wegen der Einrückung dort, wo sie nicht aufgerufen werden.
Stelle also die Auto()- und die print()-Anweiungen uneingerückt an den linken Rand des Codes. Dann stehen sie nicht mehr in der Definition von __init__, sondern hinter ihr.
(2)
Noch etwas muß geändert werden: Es muß __init__ heißen, nicht _init_, mit doppelten Unterstrichen vorne und hinten.
Hallo, habe das Problem am Ende selber lösen können.
mein _init_ hatte jeweils pro Seite einen Unterstrich zu wenig.
Dein Einrückung von auto1... bis zum Ende muss direkt zu Beginn platziert sein.
Anbei die Lösung nun:

Die Zeilen mit auto1, auto2 und auto3 sowie print müssen aus der Klasse raus - sprich ganz an den linken rand und nicht eingerückt!
Eine Klasse ist ein Bauplan - man muss erst eine Instanz erzeugen damit etwas passiert.
Dies versuchst du mit den zuvor genannten Zeilen allerdings ist dein Code so formatiert, dass das Instanzieren (auto1, auto2 und auto3) und die Ausgabe (print) ein Teil der Klasse, genauer gesagt ein Teil der Konstruktor-Funkion __init__ (mit 2 Unterstrichen!) sind und somit niemals aufgerufen werden.
1) Da fehlen wohl noch zwei Unterstriche: __init__, schließlich handelt es sich um den Konstruktor der Klasse.
2) Du solltest noch ein Auto erzeugen. Die Klasse stellt vorerst nur einen Bauplan dar.
someAuto = Auto("irgendeineMarke", "irgendeinModell", 1234, 5678)
Diese Zeile beginnt auf selber horizontaler Höhe, wie das class-Keyword.
3) Die erstellten Auto-Instanzen im Konstruktor sollten wohl eher außerhalb der Klasse erstellt werden.
Anbei einfach ein Bild:

Danke dafür, konnte es bereits lösen und wurde von mir zstl. als Kommentar gepostet. Dennoch danke.