String in Klasse 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
captainchaos
User
Beiträge: 8
Registriert: Donnerstag 28. August 2008, 08:30
Kontaktdaten:

Donnerstag 28. August 2008, 08:34

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) 
	
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Donnerstag 28. August 2008, 08:48

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!)
captainchaos
User
Beiträge: 8
Registriert: Donnerstag 28. August 2008, 08:30
Kontaktdaten:

Donnerstag 28. August 2008, 09:05

habs schon gelöst....
pickle.loads und pickle.dumps ist das was ich brauchte.
BlackJack

Donnerstag 28. August 2008, 09:28

Warum sind das alles Klassenattribute in Deinem Beispiel und was sollen die ganzen Semikolons? Bist Du sicher, dass Du in Python programmierst?
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Donnerstag 28. August 2008, 09:30

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.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Donnerstag 28. August 2008, 10:07

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
captainchaos
User
Beiträge: 8
Registriert: Donnerstag 28. August 2008, 08:30
Kontaktdaten:

Donnerstag 28. August 2008, 11:27

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.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 28. August 2008, 11:34

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Donnerstag 28. August 2008, 11:50

@captainchaos: Ich bin mir immer noch nicht so ganz sicher, dass Du in Python programmierst. Warum sind das alles Klassenattribute?
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Donnerstag 28. August 2008, 13:35

"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.
captainchaos
User
Beiträge: 8
Registriert: Donnerstag 28. August 2008, 08:30
Kontaktdaten:

Donnerstag 28. August 2008, 13:51

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?
DasIch
User
Beiträge: 2437
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Donnerstag 28. August 2008, 14:03

captainchaos hat geschrieben:Ich bin auf Python 2.5 limitiert, welches modul würdet ihr da empfehlen?
Simplejson würde ich nehmen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Donnerstag 28. August 2008, 15:02

captainchaos hat geschrieben:für C++ kenn keiner zufällig ein Bibliothek?
Gleich beim ersten Treffer auf google findest Du denke ich was ;-)
Antworten