Anfänger mit dummer Frage Open/close

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Gluon137
User
Beiträge: 2
Registriert: Mittwoch 16. Oktober 2019, 07:52

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.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
ThomasL
User
Beiträge: 1378
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Ganz wichtig zu verstehen ist dabei, dass die Variablen mit dem gleichen Namen "filenname" in deinem Beispiel
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
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Um es noch deutlicher zu sagen: wer ein File-Objekt `filename` nennt, braucht sich nicht wundern, wenn er und alle, die den Code lesen, verwirrt sind. Ein File-Objekt ist kein Filename.
Benutzeravatar
snafu
User
Beiträge: 6866
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Gluon137
User
Beiträge: 2
Registriert: Mittwoch 16. Oktober 2019, 07:52

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.
Benutzeravatar
snafu
User
Beiträge: 6866
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Gluon137 hat geschrieben: Donnerstag 17. Oktober 2019, 18:38 Eine Funktion erzeugt ein neues Objekt
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.
Gluon137 hat geschrieben: Donnerstag 17. Oktober 2019, 18:38 eine Methode verändert es.
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...
Antworten