Seite 1 von 1
Setter und Getter in Objekten
Verfasst: Mittwoch 8. Oktober 2008, 10:33
von breathe_easy
Da ich nun schon mehrfach bzgl. Setter und Getter Funktionen gelesen und auch selbst "gerügt" worden bin, brauche ich alternative Möglichkeiten um auf Namen und Vornamen folgender Klasse zu zugreifen:
Code: Alles auswählen
class eintrag (object):
def __init__ (self, name, vorname):
self.name = name
self.vorname = vorname
def get_vorname (self):
return self.vorname
def get_name (self):
return self.name
mitglieder.append(neuer_eintrag())
Alle Instanzen werden in einer Liste gespeichert und per Pickle serialisiert. Wie bekomme ich nun über mitglieder Zugriff auf die Attribute der Klasse?
Verfasst: Mittwoch 8. Oktober 2008, 10:40
von Leonidas
Suche im Forum und der Dokumentation nach "property".
Verfasst: Mittwoch 8. Oktober 2008, 10:40
von Pekh
Deine Einrückung ist wohl etwas durcheinander geraten. Ansonsten ist ja 'mitglieder' wohl eine Liste. Auf Elemente in Listen greifst du über den Index zu. Da das Element in diesem Fall vom Typ 'eintrag' sein dürfte, kannst du anschließend gleich mit '.name' weitermachen:
Verfasst: Mittwoch 8. Oktober 2008, 10:41
von DasIch
In diesem Fall sind getter und setter unnötig, wenn du sie wirklich brauchst nimm property.
Verfasst: Mittwoch 8. Oktober 2008, 10:49
von breathe_easy
Danke schön!
Verfasst: Mittwoch 8. Oktober 2008, 12:50
von Qubit
breathe_easy hat geschrieben:Danke schön!
Oder, wenn du etwas damit "spielen" willst
Code: Alles auswählen
class eintrag (object):
import sys
class selectAttr(Exception):
def __init__(self, value):
Exception.__init__(self, value)
def case(self, value):
ecls, eobj, tb = eintrag.sys.exc_info()
if ecls is eintrag.selectAttr and eobj.args[0] == value:
return ecls
return None
def __init__ (self, name, vorname):
object.__setattr__(self,"name",name)
object.__setattr__(self,"vorname",vorname)
def __getattribute__(self, attr):
s = eintrag.selectAttr(attr)
try:
raise s
except s.case('vorname'):
print "Get Vorname:"
return object.__getattribute__(self,"vorname")
except s.case('name'):
print "Get Name:"
return object.__getattribute__(self,"name")
except:
try:
return object.__getattribute__(self,attr)
except:
return "ERROR: no attribute %s" % attr
def __setattr__(self,attr,value):
s = eintrag.selectAttr(attr)
try:
raise s
except (s.case('vorname'), s.case('name')):
print "ERROR: attribute %s protected" % attr
except:
print "Set %s to %s" % (attr,value)
object.__setattr__(self,attr,value)
Verfasst: Mittwoch 8. Oktober 2008, 13:07
von rayo
Qubit hat geschrieben:Oder, wenn du etwas damit "spielen" willst
Hast du da ein Switch/Case Statement gebastelt? Das sieht ja schaurig aus.
Was willst du damit erreichen?
Gruss
Verfasst: Mittwoch 8. Oktober 2008, 13:20
von Qubit
rayo hat geschrieben:Qubit hat geschrieben:Oder, wenn du etwas damit "spielen" willst
Hast du da ein Switch/Case Statement gebastelt? Das sieht ja schaurig aus.
Was willst du damit erreichen?
hehe..
reine Spielerei
Ein "Switch" würde ich eher so machen..
Code: Alles auswählen
def switch(case):
return {
1: 'a',
2: 'b',
3: 'c'}[case]