Seite 1 von 1
String in Klasse Konvertieren
Verfasst: Donnerstag 28. August 2008, 08:34
von captainchaos
Hallo erstmal!
Ich habe folgendes Problem: Ich hab einen Chat geschrieben den ich auf meinem Server laufen lassen wollte. Ich hab mir da auch was feines ausgedacht wegen der datenübertragung:
Ich schicke klassen übers internet. Das senden ist dank __str__() kein Problem, jedoch beim empfangen will python nicht...
Wie kann ich einen String in eine Klasse umwandeln?? oder die klasse Direkt empfangen?
Code: Alles auswählen
class DataPackage(object):
type = 0
sender = "";
receiver = "";
message = "";
messageFont = "";
messageColor = "";
picture = "";
status = 0;
s = DataPackage()
s = self.request.recv(1024)
Verfasst: Donnerstag 28. August 2008, 08:48
von Hyperion
Du sendest einen String und kein Objekt Deiner Klasse! Wenn Du aus dem String wieder eine Klasse bauen willst, musst Du ihn schon entsprechend parsen und daraus ein Objekt aufbauen.
(Dein Code ist übrigens recht irrelevant hier - er zeigt ja gerade nichts von dem, was Du beschreibst!)
Verfasst: Donnerstag 28. August 2008, 09:05
von captainchaos
habs schon gelöst....
pickle.loads und pickle.dumps ist das was ich brauchte.
Verfasst: Donnerstag 28. August 2008, 09:28
von BlackJack
Warum sind das alles Klassenattribute in Deinem Beispiel und was sollen die ganzen Semikolons? Bist Du sicher, dass Du in Python programmierst?
Verfasst: Donnerstag 28. August 2008, 09:30
von Rebecca
Fuer einen ernsthaften Chat ist pickle aber nicht so guenstig, da pickle wirklich alles packt und auch ungetestet wieder entpackt. D.h. dass Clients z.B. beliebige Objekte auf deinen Server einschleusen koennen.
Ein Weg ueber XML, YAML oder JSON waere da wahrscheinlich sinnvoller.
Verfasst: Donnerstag 28. August 2008, 10:07
von rayo
Hi
Und falls du trotzdem eigene Pakete schicken möchtest und nicht auf JSON/XML/YAML zurückgreifen, kannst du auch
construct verwenden.
Denke aber wenn du auf ein vorhandenes (XML/JSON/YAML) zurückgreifst sicher nicht schlecht liegst
Gruss
Verfasst: Donnerstag 28. August 2008, 11:27
von captainchaos
Also. Ja ist python. Ich bin eigentlich C++ Entwickler und krieg diesen Tick mit den ; nicht weg...
Auf XML bin ich noch gar nicht gekommen!
Pickle kann ich übrigens doch nicht verwenden, da mein Client mit C++ geschrieben wurde. zwischen dem in C++ gepackten object und dem python script kommts zu komplikationen und ich möchte keinen python code in den client einbetten, da dieser möglich unabhängig sein soll.
Verfasst: Donnerstag 28. August 2008, 11:34
von Leonidas
Na dann XML oder JSON. YAML ist scheinbar momentan bei weitem nicht mehr so populär wie es vorher war und wurde von JSON überholt.
Alternativ fallen mir da noch Googles Protocol Buffers oder Facebooks Thrift ein.
Verfasst: Donnerstag 28. August 2008, 11:50
von BlackJack
@captainchaos: Ich bin mir immer noch nicht so ganz sicher, dass Du in Python programmierst. Warum sind das alles Klassenattribute?
Verfasst: Donnerstag 28. August 2008, 13:35
von Y0Gi
"If XML is your hammer, everything looks like a nail"
XML ist ziemlich fett und langsam zu parsen. Gerade im Internet ist JSON nicht ohne Grund so populär geworden.
Sofern es nicht besonders praktisch/sinnvoll ist, eigene Objekte abzubilden, benötigst du kein YAML. JSON ist eine Untermenge davon und mit Arrays/Listen und assoziativen Arrays/Hashes/Dicts hast du im Prinzip alles, was du für die Modellierung der meisten Fälle benötigst. Boolsche und numerische Datentypen gibt's gegenüber XML gleich mit dazu.
Weiterer Vorteil von JSON ist, dass ab Python 2.6 ein entsprechendes Modul in der Standardbibiliothek enthalten ist.
YAML verzichtet dagegen auf die Anführungszeichen und ist damit besser für Konfigurationsdateien geeignet, wie es im Ruby-Umfeld und speziell bei Rails sehr beliebt ist.
Wenn die Performance nicht ausreicht, empfiehlt sich da eine Binärstruktur. Da empfehle ich ebenfalls den Blick auf construct und Googles Protocol Buffers. Zunächst solltest du mit JSON jedoch auch gut zurecht kommen.
Verfasst: Donnerstag 28. August 2008, 13:51
von captainchaos
Ok. Danke.
Ich werds dann mit JSON versuchen. Ich bin auf Python 2.5 limitiert, welches modul würdet ihr da empfehlen? für C++ kenn keiner zufällig ein Bibliothek?
Verfasst: Donnerstag 28. August 2008, 14:03
von DasIch
captainchaos hat geschrieben:Ich bin auf Python 2.5 limitiert, welches modul würdet ihr da empfehlen?
Simplejson würde ich nehmen.
Verfasst: Donnerstag 28. August 2008, 15:02
von Hyperion
captainchaos hat geschrieben:für C++ kenn keiner zufällig ein Bibliothek?
Gleich beim ersten Treffer auf google findest Du denke ich was
