Lernbeispiel für Komposition mit Klassen macht Schwierigkeiten

13/10/2009 - 12:00 von Jan-Herbert Damm | Report spam
Hallo zusammen,

ich lerne Python mit "Lutz, Ascher: Einführung in Python". Folgendes Beispiel
aus Kapitel 22 kann ich nicht korrekt reproduzieren und wundere mich.

Kurzform der Frage:

dies funktioniert nicht:




import bspmodul
name = bspmodul.BspKlasse(open('spam.txt'), open('spamout.txt', 'w'))
name.bspmethode()






# spamout.txt wird zwar erstellt, ist aber leer

dies funktioniert:




import bspmodul
bspmodul.BspKlasse(open('spam.txt'), open('spamout.txt', \






'w')).bspmethode()
# spamout.txt entspricht den erwartungen

Zwischen diesen beiden Aufrufen, dürfte doch eigentlich kein Unterschied
bestehen, oder?

Auführlich:

Es geht darum mit Klassen und Polymorphie eine vielfàltig verwendbare
Funktionalitàt zu implementieren, bei der ein Datenstrom gelesen, konvertiert
und geschrieben werden kann. Dazu:

http://dpaste.com/106545/

Ich habe Verstàndnis wenn Euch dies alles zu wirr oder umfangreich ist. Ich
probiere das mit dpaste zum ersten mal und kann kann die Frage noch nicht
besser auf den Punkt bringen.

Dank

jan
 

Lesen sie die antworten

#1 Diez B. Roggisch
13/10/2009 - 12:18 | Warnen spam
Jan-Herbert Damm wrote:


Hallo zusammen,

ich lerne Python mit "Lutz, Ascher: Einführung in Python". Folgendes
Beispiel aus Kapitel 22 kann ich nicht korrekt reproduzieren und wundere
mich.

Kurzform der Frage:

dies funktioniert nicht:

import bspmodul
name = bspmodul.BspKlasse(open('spam.txt'), open('spamout.txt', 'w'))
name.bspmethode()






# spamout.txt wird zwar erstellt, ist aber leer

dies funktioniert:

import bspmodul
bspmodul.BspKlasse(open('spam.txt'), open('spamout.txt', \






'w')).bspmethode()
# spamout.txt entspricht den erwartungen

Zwischen diesen beiden Aufrufen, dürfte doch eigentlich kein Unterschied
bestehen, oder?

Auführlich:

Es geht darum mit Klassen und Polymorphie eine vielfàltig verwendbare
Funktionalitàt zu implementieren, bei der ein Datenstrom gelesen,
konvertiert und geschrieben werden kann. Dazu:

http://dpaste.com/106545/

Ich habe Verstàndnis wenn Euch dies alles zu wirr oder umfangreich ist.
Ich probiere das mit dpaste zum ersten mal und kann kann die Frage noch
nicht besser auf den Punkt bringen.



Du hast einen Fehler in der Indentation der "converter"-methode.

Der ist aber nicht ursaechlich. Der Grund ist ein anderer - im zweiten Fall
erzeugst du keine Referenz auf den Prozessor. Darum wird der nach Aufruf
der "process"-methode garbage-collected. Und in dem Moment werden die Files
geschlossen, und das OS flusht die Daten auf die Platte.

Das waere auch der Fall, wenn du das ganze als Skript laufen liessest.

Weil du aber scheints IPython verwendest, fliegt noch eine Referenz rum, und
die Sachen werden nicht abgeraeumt.

Alles klar?

MfG Diez

Ähnliche fragen