Danke snafu für deine Korrekturen !
@EyDu : werde ich mir heute Abend noch reinziehen.
Ich habe das ganze nochmal geschrieben, noch nicht als Dict (zwecks Training) und bin wieder auf ein paar Probleme gestossen.
Um eine Ausgabe zu erhalten, habe ich die __str__ formuliert.
Eng wurde es dann bei der Klasse Adressen. Hier musste ich schummeln, weil mir nichts besseres eingefallen ist.
Ich rufe die interne Funktion __str__ der Klasse Adresse in einer Schleife auf, um die Ausgabe zu realisieren.
Meines erachtens nicht sauber, aber wie geht es sonst ?
Code: Alles auswählen
""" dient zur Strukturierung von optionalen Adressdaten """
class Adresszusatz(object):
def __init__(self, tür=None, stiege = None, aufgang = None, sonstiges = None):
if tür:
self.tür = tür
else:
self.tür = ""
if stiege:
self.stiege = stiege
else:
self.stiege = ""
if aufgang:
self.aufgang = aufgang
else:
self.aufgang = ""
if sonstiges:
self.sonstiges = sonstiges
else:
self.sonstiges = ""
def __str__(self):
s = ""
if self.tür:
s += "".join(["Tür: ", self.tür, '\n'])
if self.stiege:
s += "Stiege: " + self.stiege + '\n'
if self.aufgang:
s += "Aufgang: " + self.aufgang + '\n'
if self.sonstiges:
s += "Zusatzinfos: " + self.sonstiges + '\n'
return s
""" da die meisten Adressen auch Festnetz und ein Fax haben, aber eben nicht alle,
wird eine eigene Klasse definiert """
class Standortdaten(object):
def __init__(self, tel = None, fax = None):
if tel:
self.tel = tel
else:
self.tel = ""
if fax:
self.fax = fax
else:
self.fax = ""
def __str__(self):
s = ""
if self.tel:
s += "".join(["Tel: ", self.tel, '\n'])
if self.fax:
s += "".join(["Fax: ", self.fax, '\n'])
return s
""" Basisdaten einer Adresse + Adresszusatz + Standortdaten """
class Adresse(Adresszusatz, Standortdaten):
def __init__(self ,bezeichnung, strasse = None, plz = None, ort = None,
land = None,
tür = None, stiege = None, aufgang = None, sonstiges = None,
tel = None, fax = None):
# Initialisierung der geerbten Objektattribute
Adresszusatz.__init__(self, tür, stiege, aufgang, sonstiges)
Standortdaten.__init__(self, tel, fax)
# Initialisierung der Objektattribute
self.bezeichnung=bezeichnung
if strasse:
self.strasse = strasse
else:
self.strasse = ""
if land:
self.land = land
else:
self.land = ""
if plz:
self.plz = plz
else:
self.plz = ""
if ort:
self.ort = ort
else:
self.ort = ""
def __str__(self):
s = ""
if self.strasse:
s += self.strasse + '\n'
if self.land:
s += self.land + "-"
if self.plz:
s += self.plz + " "
if self.ort:
s += self.ort + '\n'
# __str__ von den Oberklassen ausführen
zusatz = Adresszusatz.__str__(self)
standort = Standortdaten.__str__(self)
if zusatz != "":
s += '\n' + zusatz
if standort != "":
s += '\n' + standort
s += "-----------------------------" + '\n'
return s
""" 1 zu * - Beziehung zu Adresse """
class Adressen():
def __init__(self, daten=None):
self.adressen = []
if daten:
# falls jemand nicht eine [ Adresse ] sondern gleich ein
# Objekt des Typs Adressen übergibt, soll der Code auch funktionieren
if isinstance(daten, list) or isinstance(daten, Adressen):
for eintrag in daten:
if isinstance(eintrag, Adresse):
self.adressen.append(eintrag)
elif isinstance(daten, Adresse):
self.adressen.append(daten)
# obrige Schleife klappt nur, wenn Adressen auch iterierbar sind !
def __iter__(self):
for eintrag in self.adressen:
yield eintrag
def __str__(self):
s = ""
if self.adressen:
for d in self.adressen:
s += '\n'.join(['\n', "*************", d.bezeichnung, "*************", '\n'])
# Hier der kritische Aufruf !!!!!!!!
s += Adresse.__str__(d)
return s
class Kontakt(Adressen):
def __init__(self,vorname, nachname=None,anrede=None, mobil=None, email=None, titel=None, adressen=None):
# Initialisierung der geerbten Objektattribute von Adressen
Adressen.__init__(self, adressen)
self.vorname=vorname
if nachname:
self.nachname = nachname
else:
nachname = ""
if anrede:
self.anrede = anrede
else:
anrede = ""
if mobil:
self.mobil = mobil
else:
self.mobil = ""
if email:
self.email = email
else:
self.email = ""
if titel:
self.titel = titel
else:
self.titel = ""
def __str__(self):
s= ""
s += "".join([" ", self.titel, " ", '\n', self.vorname, " ", self.nachname,
'\n', "email: ", self.email, '\n', "mobil: ", self.mobil])
oberklasse = Adressen.__str__(self)
s += oberklasse
return s
adresse1_sepp = Adresse("Hauptwohnsitz", strasse = "Schillerstrasse 1", ort = "Objekthausen",
land = "CH", tel = "4584534345445", plz="9999",
fax="454545454", stiege = "3", aufgang = "links")
# Übergabe einer einzigen Adresse
adresse2_sepp = Adresse("Ferienhaus", strasse = "Strandbad 45", ort = "Objekthausen",
land = "IT", tel = "4457495749584")
# Falls gleich eine Liste von Adresse übergeben wird
mehrere_adressen_liste = [adresse1_sepp, adresse2_sepp]
# falls die Adressen vom Typ Adressen sind
mehrere_adressen = Adressen([adresse1_sepp, adresse2_sepp])
variante1 = Kontakt("Sepp", "Huber", anrede = "Herr", adressen = adresse1_sepp, mobil="0564545454", email="muster@abc.com")
variante2 = Kontakt("seppo", "Huber", anrede = "Herr", email="nono@nosay.com", adressen = mehrere_adressen_liste)
variante3 = Kontakt("seppo", "Huber", anrede = "Herr", email="nono@nosay.com", adressen = mehrere_adressen)
print ("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
print (variante1)
print ("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
print (variante2)
print ("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
print (variante3)
print ("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
Entschuldigung, der Code ist schon etwas lang, dafür aber komplett und ausführbar