Das zusätzliche Vorhalten der Referenz ist redundant. Das wird Dir schnell klar, wenn Du Dir überlegst, welche Daten Du korrigieren musst, falls ein Auto den Halter wechselt. Solche Konstrukte sind fehleranfällig, da Du zur Implementationszeit sicherstellen musst, dass die Daten konsistent bleiben.Xynon1 hat geschrieben:Und imho ist das nur redundant, wenn es in eine Dictionary umgewandelt wird, ansonsten speicher ich nur die Referenz um die 1:n Beziehung zuhaben, oder sehe ich das gänzlich falsch ?
Gönne dem Auto einen Blick auf den Besitzstatus, in meinem obigen Bsp. auf die "globale" Halterliste, z.B. so:Xynon1 hat geschrieben:wie weiß das Auto jetzt zu wem es gehört ? (intelligentes auto )
Code: Alles auswählen
# Klasse Auto
...
def who_owns_me(self, halter):
for h in halter:
for a in h.autos:
if a == self:
return a
return Halter() # default "None" Halter
Code: Alles auswählen
auto_zu_halter = dict((a, h) for h in halter for a in h.autos)
Und weil Du auf eine Rückreferenz bestehst :
Code: Alles auswählen
# auf empfängerseite
def set_backrefs(halter):
for h in halter:
for a in h.autos:
a.halter = h
Ich weiss nicht, wie komplex Deine echten Objekte sind und ob Du nicht mit einer Übertragung der "reinen Daten" und Erstellen der Objekte auf Empfängerseite besser fährst. Auch würde hiermit der nötige Datenaustausch geringer. Sowas ginge z.B. mit einer klasseneigenen serialize()-Methode auf Senderseite und entsprechendem Konstruktor auf Empfängerseite, der aus den serialisierten Daten das Objekt restaurieren kann.
Das Übertragen von eigenen Objekten (also jenseits von standardisierten Datencontainern) macht eigentlich nur Sinn, wenn der Empfänger nicht deren Deklaration kennen kann (z.B. beim Einsatz von Fabrikmethoden u.ä.) oder die Serialisierung zuviel Aufwand bedeuten würde. Pyro wurde ja schon genannt.