Python - dynamische klasse erstellen



  • Hallo ich habe verschiedene Textdateien mit Messungen gefüllt
    in der Art:

    # datei 1
    t    s
    0    0
    1    2
    2    4
    3    6
    4    8
    5    10
    
    # datei 2
    
    a b c
    0 0 0
    1 2 1
    2 4 4
    3 6 9
    4 8 16
    

    Ich weiß vorher nicht genau welche Spalten eine Textdatei enthält.

    Nun möchte ich aber für solche dateien dynamische klassen erzeugen.

    zb eine Klasse datei1_class mit den attributen t und s.

    oder eine klasse datei2_class mit den attributen a b und c.

    Wie wäre so etwas möglich?

    Wie gesagt, ich weiß vorher nicht welche spalten eine datei enthält und was deren datentyp ist



  • http://docs.python.org/library/csv.html zum einlesen

    und dann: magic

    class Foo(object):
        def __init__(self, **kwargs):
            self.__dict__ = kwargs
    
    f = Foo(a = 1, b = "bar")
    print f.a, f.b
    

    @ Admins: Wie sieht's mit python-markup aus 🕶 ?



  • danke für den tipp mit csv, nur bin ich in python nicht ganz so fit, dass ich gleich alles verstehen könnte.

    Ich hab jetzt bei csv 2 Methoden gefunden:
    1. der "normale" reader
    2. der DictReader, der gleich ein dictionary anlegt,

    sozusagen aus

    Vorname Nachname
    Julian Hirsch
    

    {Vorname: Julian, Nachname: Hirsch} anlegt.
    Welcher wäre für meine Zwecke geeigneter?

    Was für ein Konstrukt ist def __init__(self, **kwargs) ?

    Gibt es einen einfachen Werg um zu überprüfen ob eine Spalte wahrscheinlich Zahlen-Werte enthält?
    So etwas kenne ich bisher nicht. Wie nutze ich es effektiv?



  • shisha schrieb:

    Was für ein Konstrukt ist def __init__(self, **kwargs) ?

    kwargs = keyword arguments, eine art dict

    Wie pythoneer bereitsgesagt hat, kannst du dann eine Instanz dieser Klasse erstellen mit

    f = Foo(a = 1, b = "bar")

    Du kannst abgesehen von a & b noch beliebig viele argumente mit beliebigigen namen übergeben



  • shisha schrieb:

    danke für den tipp mit csv, nur bin ich in python nicht ganz so fit, dass ich gleich alles verstehen könnte.

    Ich hab jetzt bei csv 2 Methoden gefunden:
    1. der "normale" reader
    2. der DictReader, der gleich ein dictionary anlegt,

    sozusagen aus

    Vorname Nachname
    Julian Hirsch
    

    {Vorname: Julian, Nachname: Hirsch} anlegt.
    Welcher wäre für meine Zwecke geeigneter?

    ich würde den dictreader nehmen

    Was für ein Konstrukt ist def __init__(self, **kwargs) ?

    http://docs.python.org/tutorial/controlflow.html#keyword-arguments
    http://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists
    -> deswegen ist der dictreader praktisch

    Gibt es einen einfachen Werg um zu überprüfen ob eine Spalte wahrscheinlich Zahlen-Werte enthält?
    So etwas kenne ich bisher nicht. Wie nutze ich es effektiv?

    dazu kenne ich nichts, ich würde nach dem einlesen die werte pro spalte identifizieren.



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Themen rund um den PC in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • ok, soweit kapier ich es allmählich, aber hier haben die argumente immer noch die namen a, b usw.

    Wenn möglich möchte ich den Namen der Variablen auch noch auslesen lassen. Kann mir einer vlt ein funktionierendes Beispiel anhand der Minidatei

    Vorname Nachname
    Max Muster
    Petra Müller
    

    demonstrieren?

    Ergebnis sollte sein : eine Klasse (beliebiger Name) Mit genau 2 Attributen
    Vorname und Nachname.

    Am Ende des Auslesevorganges hätte ich dann gerne eine Liste, welche alle ausgelesenen Objekte der neu erstellten Klasse enthält.

    Also

    Das Programm liest die erste Zeile ein und erstellt eine Klasse C mit Vorname und Nachname, anschließend wird ein C erzeugt, mit Vorname = Max und Nachname = Muster.
    Dieses wird in eine Liste gelegt. Anschließend nächste Zeile.

    Das selbe Programm sollte aber auch mit

    Zeit Strecke Fortbewegungsmittel
    0 0 Fuß
    1 2 Fuß
    2 8 Fahrrad
    

    zurechtkommen- in diesem Fall soll eben eine Klasse C mit den Attributen Zeit Strecke und Fbewegungsmittel entstehen.


Anmelden zum Antworten