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=]
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())
[/code]
Alle Instanzen werden in einer Liste gespeichert und per Pickle serialisiert. Wie bekomme ich nun über mitglieder Zugriff auf die Attribute der Klasse?
Setter und Getter in Objekten
-
- User
- Beiträge: 58
- Registriert: Sonntag 29. Juli 2007, 18:34
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:
Code: Alles auswählen
mitglieder[2].name
Code: Alles auswählen
mitglieder[0].vorname
In diesem Fall sind getter und setter unnötig, wenn du sie wirklich brauchst nimm property.
-
- User
- Beiträge: 58
- Registriert: Sonntag 29. Juli 2007, 18:34
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)
rayo hat geschrieben:
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]
Wer ist online?
Mitglieder in diesem Forum: Bing [Bot]