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
Wo soll ich am besten Argumente zu Attributen konvertieren?
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
Hallo mutetella,
ich verwende für diese Fälle eine create_from_... Klassenmethode:
Grüße
Sirius
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))
Sirius
@Sirius3
Dein Vorschlag ist toll, danke!
Um bei Deinem Beispiel zu bleiben habe ich das so umgesetzt:
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...
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...
mutetella
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))
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...
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )