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
Objektattribute über eine Liste afragen
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Code: Alles auswählen
for thingy in liste:
print thingy.get_gewicht()
Code: Alles auswählen
from operator import methodcaller
map(methodcaller('get_gewicht'), liste)
Du solltest allerdings direkt auf dass Gewicht zugreifen oder sollte wirklich ein getter(/setter/deleter) benötigt sein, ein property benutzen.
Zuletzt geändert von DasIch am Samstag 28. März 2009, 20:53, insgesamt 1-mal geändert.
Eine for Schleife reicht da total und ist viel lesbarer.DasIch hat geschrieben:Wenn man die Ergebnisse verarbeitet und keine Liste braucht bietet sich imap aus dem itertools Modul an.Code: Alles auswählen
from operator import attrcaller map(attrcaller('get_gewicht'), liste)
Du solltest allerdings direkt auf dass Gewicht zugreifen oder sollte wirklich ein getter(/setter/deleter) benötigt sein, ein property benutzen.
Evtl. noch eine List Comprehension:
Code: Alles auswählen
[foo.get_gewicht() for foo in liste]
Code: Alles auswählen
(foo.get_gewicht() for foo in liste)
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.).
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek
In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
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.
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.