Programmierstyle: Decorators
Verfasst: Montag 20. April 2009, 16:29
Hallo,
ich suche nach einer Lösung, die es mir erlaubt, ein bestimmtes Objekt auf verschiedene Weise zu repräsentieren. Und zwar geht es um Punktobjekte, die durch die Koordinaten x, y, z repräsentiert werden. Nun benötige ich je nach Fall eine andere Art der Darstellung.
In meiner Datenbank wäre die benötigte Repräsentation POINT(x,y,z). Als XML - Datei in der Art "<coordinate>x, y, z</coordinate>", wobei ich mehrere XML Dialekte bedienen muss, die immer ein wenig anders einen Punkt beschreiben.
Aus meiner PHP Zeit kenne ich noch das Decorator Pattern, das sowas ja relativ elegant ermöglicht. Den Schnökes mit den Interfaces wie in PHP kann ich mir ja sparen
Nur ist das auch in Python eine elegante Möglichkeit? Man könnte ja auch einfach je nach Repräsentationstyp eine Funktion schreiben und das Punktobjekt übergeben. Die Funktion konstruiert den String und gibt ihn zurück.
Bisher habe ich:
und ein Dekorierer:
Wahrscheinlich denke ich wieder zu kompliziert oder so, deshalb wäre ich für Tipps zur Herangehensweise dankbar ...
Gruß Frank
ich suche nach einer Lösung, die es mir erlaubt, ein bestimmtes Objekt auf verschiedene Weise zu repräsentieren. Und zwar geht es um Punktobjekte, die durch die Koordinaten x, y, z repräsentiert werden. Nun benötige ich je nach Fall eine andere Art der Darstellung.
In meiner Datenbank wäre die benötigte Repräsentation POINT(x,y,z). Als XML - Datei in der Art "<coordinate>x, y, z</coordinate>", wobei ich mehrere XML Dialekte bedienen muss, die immer ein wenig anders einen Punkt beschreiben.
Aus meiner PHP Zeit kenne ich noch das Decorator Pattern, das sowas ja relativ elegant ermöglicht. Den Schnökes mit den Interfaces wie in PHP kann ich mir ja sparen
Nur ist das auch in Python eine elegante Möglichkeit? Man könnte ja auch einfach je nach Repräsentationstyp eine Funktion schreiben und das Punktobjekt übergeben. Die Funktion konstruiert den String und gibt ihn zurück.
Bisher habe ich:
Code: Alles auswählen
class Point(object):
def __init__(self, x, y, z=None):
self.x = x
self.y = y
self.z = z
def __repr__(self):
return "%s %s %s" % (self.x, self.y, self.z)
Code: Alles auswählen
class WKTPoint(object):
def __init__(self, point):
self.point = point
def __repr__(self):
if self.point.z == None:
return "POINT(%s %s)" % (self.point.x, self.point.y)
else:
return "POINT(%s %s %s)" % (self.point.x, self.point.y, self.point.z)
Gruß Frank