Hallo zusammen,
ich bin mir sicher, dass mein Problem irgendwo genau erklärt wird, kann es aber nicht suchmaschinentauglich formulieren.
Ich bringe mir Python mit „Learn python the hard way“ bei. Klappt gut, ein bisschen viel print(), aber ok.
Meine Frage ist: warum werden Funktionen (?) wie open() oder close() so aufgerufen:
open(filename) aber filename.close()
Mir ist das völlig unklar und wenn ich das verstehen würde, könnte ich mir das besser merken.
Anfänger mit dummer Frage Open/close
Das sind zwei unterschiedlich Sachen. Das eine ist eine Funktion. Die bekommt ein Argument, den Dateinamen. Und liefert ein Ergebnis in Form eines Objektes. Ein geöffnetes Dateiobjekt. Und damit kannst du jetzt arbeiten. Lesen. Schreiben. Und schließen. Das bezieht aber nunmal immer auf ein konkretes Objekt. Und nennt sich darum Methode.
Ganz wichtig zu verstehen ist dabei, dass die Variablen mit dem gleichen Namen "filenname" in deinem Beispiel
völlig unterschiedliche Objekte sind.
open(filename) aber filename.close()
völlig unterschiedliche Objekte sind.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
open() ist eine Funktion, die ein neues Dateiobjekt liefert. close() ist eine Methode auf diesem Dateiobjekt. Man hätte natürlich auch ähnlich wie in C alles als Funktionen implementieren können (open, close, read, write, usw), aber in Python wurde der objektorientierte Weg gewählt und open() dient quasi als Factory.
Aha, vielen Dank. Das erklärt einiges.
Damit ich das richtig verstehe:
Eine Funktion erzeugt ein neues Objekt, eine Methode verändert es.
Dann verstehe ich auch die leicht genervt wirkende Antwort von Sirius3
Jedenfalls danke für die netten und hilfreichen Antworten.
Damit ich das richtig verstehe:
Eine Funktion erzeugt ein neues Objekt, eine Methode verändert es.
Dann verstehe ich auch die leicht genervt wirkende Antwort von Sirius3

Jedenfalls danke für die netten und hilfreichen Antworten.
Eine Funktion muss nicht zwingend etwas zurückgeben und die Rückgabe muss auch nicht unbedingt von der Funktion selbst erzeugt werden. Die kann z.B. auch aus einem internen Aufruf einer anderen Funktion stammen. Ebenso können Methoden neue Objekte erzeugen und zurückliefern.
Häufig, aber auch nicht zwingend. Siehe meine vorherige Anmerkung.
Was man aber sagen kann: Methoden werden auf Klassen definiert und nutzen beim Aufruf meistens die entsprechende Klasseninstanz (auch hier gibt es Ausnahmen). Funktionen dagegen existieren ohne unmittelbaren Bezug zu einer Klasse bzw Instanz. Aber sie können andere Objekte als Parameter übergeben bekommen und damit arbeiten.
Das hätte dir eine Suchmaschine aber alles ebenso verraten können...