Aus einer Funktion heraus Objekte erstellen

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
iiischa
User
Beiträge: 8
Registriert: Sonntag 4. November 2012, 20:47

Hallo!
Ich habe mal eine Frage zur Objektorientierung.. leider komme ich da noch nicht so gut damit zurecht. :(
Ich möchte eine Textdatei einlesen, und zwar mittels einer Funktion, die je nach Textstelle ein Objekt erstellt mit einer Klasse, die ich eigentlich schon geschrieben habe. Nur weiß ich nicht, wie ich in der Funktion Objekte initialisieren kann, die durch die eingelesene Datei entstehen. Hoffentlich versteht ihr was ich meine. Vllt könnt ihr mir ja einen Tipp geben? Ich habe zwar schon gesucht aber ehrlich gesagt weiß ich nicht mal nach was ich richtig suchen könnte. :(
Danke im Vorraus!
BlackJack

@iiischa: Wo ist denn das konkrete Problem? Erstell das Objekt einfach. Die Initialisierung wird ja in der `__init__()`-Methode vorgenommen, die beim erstellen eines Exemplars ja automatisch aufgerufen wird.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Die Frage hat sehr wenig mit Objektorientierung zu tun. In Python ist alles ein Objekt, d.h. deine Frage reduziert sich auf "Wie erstelle ich irgendetwas in einer Funktion?".

Nehmen wir mal an du hast eine Klasse

Code: Alles auswählen

class Foo(object):
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c
Und du hast eine Textdatei deren Zeilen jeweils diese 3 Werte durch Leerzeichen getrennt darstellen.
Dann erzeugst du alle Objekte dieser Datei so:

Code: Alles auswählen

def read_foos(filename):
    foos = []
    with open(filename) as f:
         for line in f:
             a, b, c = line.rstrip().split(' ')
             foos.append(Foo(a, b, c))
    return foos
`read_foos` kann man natuerlich noch kuerzer schreiben, aber das ist nicht der Punkt

Code: Alles auswählen

def read_foos(filename):
    with open(filename) as f:
         return [Foo(*(line.rstrip().split(' '))) for line in f]
iiischa
User
Beiträge: 8
Registriert: Sonntag 4. November 2012, 20:47

Danke für die Antworten!
ich weiß aber nicht ob ich das ganz verstehe :(. Du Splittest den Text in Zeilen und die werden dann eine einzige Instanz? Ich würde aber gerne die Datei je nachdem, wie viele ">" sie in sich hat, zerlegen und aus jedem Teil eine Instanz erstellen, und weiß nicht, wie ich das übergeben soll.
BlackJack

@iiischa: Ich verstehe immer noch nicht wo das Problem ist, weil das wie schon gesagt auch überhaupt nichts mit Objektorientierung zu tun hat. An der Stelle kann man die Klasse ja einfach als Funktion sehen die einen Wert liefert. Wenn Du also weisst wie Du Deine Eingabe zerlegen kannst/willst, und wie man Funktionen aufruft, dann mach das einfach. Wenn Du nicht weisst wie man Funktionen aufruft, dann arbeite ein Grundlagentutorial durch. Bleibt also noch die Zerlegung der Eingabe. Darüber hast Du bis jetzt noch nichts gesagt, also kann man da auch schlecht irgendwas zu raten. Textdateien werden meistens Zeilenweise verarbeitet. Man könnte sie auch komplett einlesen. In beiden Fällen ist der nächste Schritt dann wahrscheinlich Zeichenkettenverarbeitung. Da würde ich jetzt auch erst einmal auf Grundlagentutorials und die Python-Dokumentation verweisen.

Oder Du stellst mal *konkrete* Fragen. Mit konkretem Quelltext und konkreten Eingabedaten. Denn allgemein hat cofi eigentlich alles gesagt, was man da sagen kann.
Antworten