Seite 1 von 1
Objektattribute über eine Liste afragen
Verfasst: Samstag 28. März 2009, 17:20
von halux
Hallo,
ich habe Objekte mit dem Attribut get_gewicht() in einer Liste mit
liste.append(objekt) gespeichert.
wie kann ich nun, in einer Abfrage, bei allen in der Liste gespeicherten
Objekten dieses Objektattribut abfragen ( ausgeben ) lassen
Danke halux
Verfasst: Samstag 28. März 2009, 17:24
von cofi
Allerdings braucht man in Python keine trivialen Getter/Setter -> greif direkt auf das gewicht zu.
Verfasst: Samstag 28. März 2009, 20:36
von DasIch
Code: Alles auswählen
from operator import methodcaller
map(methodcaller('get_gewicht'), liste)
Wenn man die Ergebnisse verarbeitet und keine Liste braucht bietet sich imap aus dem itertools Modul an.
Du solltest allerdings direkt auf dass Gewicht zugreifen oder sollte wirklich ein getter(/setter/deleter) benötigt sein, ein property benutzen.
Verfasst: Samstag 28. März 2009, 20:40
von name
DasIch hat geschrieben:Code: Alles auswählen
from operator import attrcaller
map(attrcaller('get_gewicht'), liste)
Wenn man die Ergebnisse verarbeitet und keine Liste braucht bietet sich imap aus dem itertools Modul an.
Du solltest allerdings direkt auf dass Gewicht zugreifen oder sollte wirklich ein getter(/setter/deleter) benötigt sein, ein property benutzen.
Eine for Schleife reicht da total und ist viel lesbarer.
Evtl. noch eine List Comprehension:
oder eine Generator Expression:
PS: Fuer die Code-Golfer hier im Forum, die LC bzw. GenExp ist um ein byte kuerzer (sogar ohne den Import).
PPS: Das mit properties ist so eine Sache, sie taeuschen Trivialitaet vor obwohl unter der Haube vllt. was kompliziertes passiert. Fuer intensive Berechnungen und Sachen die State aendern wuerde ich eine methode bevorzugen (vgl. dict.items
() ist eine Methode weil es eben nicht trivial ist.).
Verfasst: Samstag 28. März 2009, 21:45
von BlackJack
Vielleicht ist `dict.items()` auch eine Methode weil es das schon viel länger gibt als es Properties in Python gibt.
Das mit Properties und Trivialität ist so eine Sache. Wenn man weiss, das es Properties gibt, muss man prinzipiell damit rechnen, dass ein Attributzugriff Berechnungen nach sich zieht. Im Grunde muss man das sogar ohne Properties, weil's ja `__getattr__()` gibt. Und vielleicht ist das Objekt, dass man da vor sich hat ein Proxy, der sich den Wert für das Attribut über's Netz von einem anderen Rechner holt. Das ist also nur eine Faustregel, dass man es vermeiden sollte längere Berechnungen bei Attributzugriffen anzustossen.
Den Zustand eines Objektes sollte man dagegen auch bei `get_*()`-Methoden nicht unbedingt ändern, denn das käme auch bei einer `get_gewicht()`-Methode etwas unerwartet.
Bei einem `gewicht`-Property würde ich es zum Beispiel noch legitim finden, wenn dabei das Gewicht durch aufaddieren von "Teilen des Objekts" berechnet würde. Ist letztendlich Geschmackssache.
Objektattribute über eine Liste afragen
Verfasst: Sonntag 29. März 2009, 10:33
von halux
das hat ja super geklapt
habe mich für die Variante mit der for Schleife entschieden, weil für mich verständlich und einfach zu lesen.
Die einfachsten Dinge sind die Besten . . .
Danke halux
