subclass

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
ratna_fong
User
Beiträge: 38
Registriert: Samstag 3. Juli 2010, 10:43

Hallo zusammen :D ,

ich habe mal eine Frage, was ist denn eine Subclass?

Ich möchte versuchen, Python anhand der "Schlüsselwörter" zu nachvollziehen.

Folgendes zum Beispiel:

StreamReader

codecs.StreamReader(stream[, errors])
dies ist der Konstruktor von der Klasse StreamReader.

Es steht, dass StreamReader eine Subklasse von der Klasse codecs ist. Heißt das abgeleitet? Also, StreamReader ist eine Unterklasse von der Oberklasse codecs?

Wie dem auch sei, StreamReader ist also eine Klasse. Wie es bei Klassen üblich ist, kann man ein Objekt davon erzeugen. Nun, sagen wir mal, ich möchte eins erzeugen:

RatnasObjekt = codecs.StreamReader(....)

Ratna stellt fest, dass die Klasse zur Erzeugung eines Objekts einen Parameter braucht, nämlich vom Typ stream. Och jee.. was ist das? Ratna guckt ins Tutorial, es steht: stream must be a file-like object open for reading (binary) data

Mhh.. also, so etwas zum Beispiel: RatnasDatei = open("datei.txt","rb")

Ratna fragt sich:
Gibt es so etwas auch in C/C++ und Java? Stream als Parameter?
Heißt nun stream wirklich Stream im eigentlichen Sinne? Stream im eigentlichen Sinne ist ja nicht "a file-like object", sondern einfach ein Datenstrom. Das Ganze irgendwie verwirrend.

Vielen Dank für Eure Hilfe.

Eure Ratna
:oops:
BlackJack

@ratna_fong: Ich denke Du musst hier mit Gross- und Kleinschreibung genauer sein um Missverständnisse zu vermeiden, denn `StreamReader` ist eine Subklasse von `Codec`. `codecs` heisst das Modul in dem beide zu finden sind. Und ja, Subklasse heisst abgeleitet. `StreamReader` haben also die gleichen Methoden wie `Codec` plus ihre eigenen.

Namen für Objektexmeplare ausser Klassen (und "Konstanten") sollten per Konvention (PEP8) klein und mit Unterstrichen geschrieben werden. also `ratnas_objekt` statt `RatnasObjekt`. So kann man Klassen besser erkennen und hat auch keine Probleme einen Namen für ein Exemplar zu finden -- wenn einem absolut nichts passenderes einfällt kann man immer noch den Klassennamen in die Kleinschreibung-mit-Unterstrichen-Konvention überführen. Also hier zum Beispiel `stream_reader = StreamReader(…)`.

`stream` ist der Name des Arguments und nicht der Typ. Der ("Duck-")Typ ist wie in der Doku zu lesen ist ein "file-like object".

Ja so etwas wie Streams gibt es auch in C, C++ und Java. Denn wo ist denn der Unterschied zwischen einem Dateiobjekt und einem Datenstrom? Welche Operationen würdest Du auf einem Datenstrom-Objekt erwarten und wie unterscheiden die sich von einem Dateiobjekt?
ratna_fong
User
Beiträge: 38
Registriert: Samstag 3. Juli 2010, 10:43

es gibt nämlich gar keinen Unterschied zwischen Dateiobjekt und Datenstrom. Beide beziehen sich auf den "Inhalt". Och jee.. hoffentlich ist das jetzt so richtig.

Gruss aus dem Rheiland,

Eure Ratna :oops:
Antworten