Setter und Getter in Objekten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
breathe_easy
User
Beiträge: 58
Registriert: Sonntag 29. Juli 2007, 18:34

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?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Suche im Forum und der Dokumentation nach "property".
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

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
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Code: Alles auswählen

mitglieder[0].vorname
In diesem Fall sind getter und setter unnötig, wenn du sie wirklich brauchst nimm property.
breathe_easy
User
Beiträge: 58
Registriert: Sonntag 29. Juli 2007, 18:34

Danke schön!
Qubit
User
Beiträge: 128
Registriert: Dienstag 7. Oktober 2008, 09:07

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
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Qubit hat geschrieben:Oder, wenn du etwas damit "spielen" willst ;-)
:shock: Hast du da ein Switch/Case Statement gebastelt? Das sieht ja schaurig aus.

Was willst du damit erreichen?

Gruss
Qubit
User
Beiträge: 128
Registriert: Dienstag 7. Oktober 2008, 09:07

rayo hat geschrieben:
Qubit hat geschrieben:Oder, wenn du etwas damit "spielen" willst ;-)
:shock: 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]
Antworten