Wo soll ich am besten Argumente zu Attributen konvertieren?

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
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Hallo,

bisher erstelle ich aus geparsten Argumenten gleich im Parser passende Attribute, aus denen dann Klassenexemplare erstellt werden können.
Zum Beispiel besitzt der Parser eine Methode '_list'. Bisher war es ausreichend, dass mir '_list' eine Liste aus Stringelementen lieferte. Inzwischen benötige ich aber auch Listen mit int-Elementen.
Ich bin also an einem Punkt, mir zu überlegen, ob es nicht besser wäre, diese ganze Konvertiererei aus dem Parser herauszunehmen. Nur, wohin? Eigentlicher Knackpunkt ist ja, dass ich zu jedem Argument, aus dem ich dann ein Attribut formen möchte, genaue Informationen brauche, wobei es sich bei dem Attribut handeln muss (siehe mein Thread vor einigen Tagen).
Wäre ein geeigneter Ort nicht die jeweilige Klasse selbst? Nachdem ich aber bisher noch nie gesehen habe, dass eine Klasse Argumente erhält, die sie erst noch "passend" machen muss, wollte ich von euch hören, ob das überhaupt ein potentiell sinnvoller Weg ist?

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Hallo mutetella,

ich verwende für diese Fälle eine create_from_... Klassenmethode:

Code: Alles auswählen

class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @classmethod
    def create_from_strings(cls, name, age):
        return cls(name, int(age))
Grüße
Sirius
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@Sirius3
Dein Vorschlag ist toll, danke!

Um bei Deinem Beispiel zu bleiben habe ich das so umgesetzt:

Code: Alles auswählen

class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @staticmethod
    def convert2int(string):
        return int(string)

    @classmethod
    def create_from_strings(cls, name, age):
        return cls(name, cls.convert2int(age))
Jetzt, da ich die convert-Funktionen aus dem Parser heraus in die jeweiligen Klassen verlagere stoße ich immer wieder an den Punkt: Wo hört Parsen auf? Es ist einfach verlockend, einen Wert, den man gewissermaßen schon in Händen hält, auch gleich noch zu formen... :roll:
Wenn früher jemand mit leeren Händen vom Esszimmer in die Küche ging, rief meine Großmutter immer hinterher: "Net leer gau!" Daher kommt es wohl, dass ich immer in der Gefahr stehe, zu viel in eine Funktion stecken zu wollen... :mrgreen:

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Antworten