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.
breathe_easy
User
Beiträge: 58
Registriert: Sonntag 29. Juli 2007, 18:34

Setter und Getter in Objekten

Beitragvon breathe_easy » Mittwoch 8. Oktober 2008, 10:33

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?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 8. Oktober 2008, 10:40

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

Beitragvon Pekh » Mittwoch 8. Oktober 2008, 10:40

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: 2423
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Beitragvon DasIch » Mittwoch 8. Oktober 2008, 10:41

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

Beitragvon breathe_easy » Mittwoch 8. Oktober 2008, 10:49

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

Beitragvon Qubit » Mittwoch 8. Oktober 2008, 12:50

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:

Beitragvon rayo » Mittwoch 8. Oktober 2008, 13:07

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: 75
Registriert: Dienstag 7. Oktober 2008, 09:07

Beitragvon Qubit » Mittwoch 8. Oktober 2008, 13:20

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]

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]