netdoobage hat geschrieben:neuen Instanz von Person ablegen und den Instanzen eindeutige Namen geben. Das allerdings halt dynamisch entsprechend der Anzahl der Datensätze.
Hallo netdoobage!
Genau daran wird dein Konzept wahrscheinlich scheitern. Du solltest nicht Instanzen mit dynamisch vergebenen Namen anlegen, sondern die Instanzen in einer Liste oder in einem Dictionary ablegen.
- Ein Tupel ist ein unveränderbarer Kontainer für Elemente, auf die per Index (=Zahl) zugegriffen werden kann. Benenne Variablen nicht nach dem Typ der Variable, sondern nach dem Inhalt/Zweck. (kann schnell durchlaufen werden)
- Ein Dictionary ist ein veränderbarer Kontainer für Elemente, auf die mit einem Schlüssel (Zahl, Text, unveränderbare Objekte) zugegriffen werden kann. (ist sehr schnell, beim Zugriff auf ein Element, wenn man den Schlüssel weiß)
- Die Namen "Basisklasse" und "tupel" sind außerordendlich schlecht gewählt. Benenne die Klasse nach dem, was sie darstellen soll.
- Ich persönlich, würde die Daten nicht beim Erstellen der Klasseninstanz (nicht __init__) übergeben. Ich würde dafür eine eigene Methode schreiben, die ein Dictionary (nennen wir es mal datadict, da ich nicht weiß, was für Daten drinnen sind) übernimmt und die Daten in die Instanzvariablen schreibt.
z.B. so:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
class Vertrag(object):
antwortetnicht = None
asb = None
auftragid = None
bereitstellung = None
cuda_asb = None
cuda_bitrate = None
cuda_doppelader = None
cuda_dtag = None
cuda_endverschluss = None
cuda_name = None
cuda_onkz = None
cuda_ort = None
cuda_raum = None
cuda_rkomname = None
cuda_rkomtel = None
cuda_rufbisher = None
cuda_strasse = None
da = None
dtagvertragsnummer = None
einseitigeverstaendigung = None
ev = None
geraeusch = None
hochbit = None
hvtort = None
hvtplz = None
hvtstrasse = None
keinankommenderruf = None
keineverstaendigung = None
kunde = None
kundennummer = None
kvz = None
onkz = None
ort = None
portierung = None
raum = None
reaktionsmeldung = None
referenznummer = None
rufnummer = None
sachbearb_name = None
sachbearb_telnr = None
sonstiges = None
sonstigestext = None
strasse = None
termin = None
termin_unf = None
ticketnummer = None
tickets_hid = None
ticketsid = None
typ = None
uevtnr = None
verfahren = None
vertragnummer = None
vierdraht = None
zweidraht = None
zwischenmeldung = None
def import_datadict(self, datadict):
"""
Bekommt ein Dictionary mit Werten uebergeben, die importiert werden.
"""
translation = {
"rkomname": "sachbearb_name",
"rkomtel": "sachbearb_telnr"
}
if datadict.has_key('dtagvertragsnummer'):
translation["termin"] = "termin_unf"
for key, value in datadict.iteritems():
if key in translation:
setattr(self, translation[key], value)
else:
setattr(self, key, value)
def __str__(self):
"""
Stringausgabe
"""
if self.dtagvertragsnummer is not None:
s = "DTAGVertrag (%(dtagvertragsnummer)s):\n"
else:
s = "Vertrag (%(vertragnummer)s):\n"
if self.sonstiges is not None:
s += " %(sonstiges)s"
return s % self.__dict__
class Vertraege(dict):
"""
Das ist der Kontainer fuer die Vertraege
"""
def get_all_dtagvertraege(self, iterable = True):
"""
Gibt alle DTAG-Verträge als Generator zurück
"""
vertraege = (
self[vertrag] for vertrag in self
if self[vertrag].dtagvertragsnummer is not None
)
if iterable:
return vertraege
else:
return list(vertraege)
def main():
vertraege = Vertraege()
# Vertrag 1
datadict = {
"dtagvertragsnummer": "123456",
"sonstiges": "Wir sind gekommen um zu bleiben."
}
vertrag = Vertrag()
vertrag.import_datadict(datadict)
vertraege["123456"] = vertrag
# Vertrag 2
datadict = {
"vertragnummer": "65423",
"sonstiges": "Alles Walzer..."
}
vertrag = Vertrag()
vertrag.import_datadict(datadict)
vertraege["65423"] = vertrag
# Verträge anzeigen
for key, vertrag in vertraege.items():
print vertrag
print
print "------------------"
print
# Alle DTAG-Verträge anzeigen
for vertrag in vertraege.get_all_dtagvertraege():
print vertrag
if __name__ == "__main__":
main()
mfg
Gerold