Klassen Formatieren

Eigene class Definitionen, eigene Attribute ... es ist durchaus üblich, Daten so zu speichern. Beispiel:

   1 class nasenbaer:
   2 
   3      def __init__(self, alter=26, name="Karlchen"):
   4          self.alter = alter
   5          self.name = name

... jedes nasenbaer-Objekt hat nun in den Attributen alter und name die jeweiligen Werte gespeichert, neue Nasenbaeren macht man mit

   1 sonja = nasenbaer(32, "Sonja")

Soooo... Pythons Eleganz erlaubt auch weitere Attribute...

   1 sonja.haarfarbe = "blond"

nun hat der Nasenbaer Sonja die Haarfarbe blond. AAABER ... was kommt raus, wenn wir den Nasenbaer anzeigen lassen???

   1 print sonja
   2 <__main__.nasenbaer instance at 0x01764FD0>

Natoll. Und welche Haarfarbe hat Nasenbaer Sonja????

NUN kommt die Rettung!!!

   1 class nasenbaer:
   2 
   3     def __init__(self, alter=26, name="Karlchen"):
   4         self.alter = alter
   5         self.name = name
   6 
   7     def __repr__(self):
   8         return self.__class__.__name__ + "(%r, %r)" % (self.alter, self.name)
   9 
  10     def __str__(self):
  11         return "\n".join(["%s: %s" % (k,v) for k,v in self.__dict__.iteritems()])

und wiederum

   1 sonja=nasenbaer(32,"Sonja")
   2 
   3 print sonja
   4 haarfarbe: blond
   5 alter: 32
   6 name: Sonja
   7 
   8 print repr(sonja)
   9 nasenbaer(32, "Sonja")

Der Unterschied zwischen __repr__ und __str__ ist, dass ersteres versucht einen String auszugeben, der von Python wieder verstanden wird, während __str__ für den Menschen verständlich sein sollte. So könnte __repr__ als einfache Methode verwendet werden um Daten in eine Datei zu speichern.

Klassen Formatieren (last edited 2009-06-17 16:14:14 by localhost)