Seite 1 von 1
Zugriff auf Attribute
Verfasst: Freitag 23. Mai 2008, 09:35
von Martin Kalbfuß
Hallo Zusammen.
Ich will eine Liste von Attributen erhalten. Eine möglichkeit habe ich schon über getattr und map gefunden.
Also:
Code: Alles auswählen
class Test:
def __init__(self, Attribut):
self.Attribut = Attribut
Objekte = [Test(1), Test(2), Test(3), Test(4)]
Attribute = map(lambda Objekt: getattr(Objekt, 'Attribut'), Objekte)
print Attribute
Geht das auch einfacherer?
Verfasst: Freitag 23. Mai 2008, 10:22
von fred.reichbier
Hallo, willkommen im Forum!
Diese Zeile:
Code: Alles auswählen
Attribute = map(lambda Objekt: getattr(Objekt, 'Attribut'), Objekte)
solltest du durch eine List Comprehension:
Code: Alles auswählen
Attribute = [getattr(Objekt, 'Attribut') for Objekt in Objekte]
ersetzen können
Gruß Fred
Re: Zugriff auf Attribute
Verfasst: Freitag 23. Mai 2008, 10:49
von keppla
Sofern nicht der Name des Attributs zur Programmierzeit unbekannt ist (geht irgendwie aus deinem Text nicht hervor), könntest du das auch so machen:
Und bitte, halte dich an die Styleguides (pep

, zumindest in sofern, dass Identifier klein geschrieben werden, sofern sie keine Klassen sind.
Verfasst: Freitag 23. Mai 2008, 11:09
von EyDu
@fred.reichbier: Warum sollte ich denn ein map durch eine LC ersetzen, wenn map genau das geforderte tut?
Code: Alles auswählen
import operator
attributes = map(operator.attrgetter('attribute'), objects)
Verfasst: Freitag 23. Mai 2008, 11:18
von fred.reichbier
Weil ich List Comprehensions so schön finde :K
Danke
Verfasst: Freitag 23. Mai 2008, 21:10
von Martin Kalbfuß
Super. Diese Antworten waren mehr als ausreichend. Wieder was gelehrnt über Python.
Verfasst: Freitag 23. Mai 2008, 21:24
von EyDu
Ja, so eine LC macht wirklich was her und gegen persönliche Präferenzen kann man natürlich nicht viel sagen. Immerhin ordne ich meine Importe ja auch sinnvoll nach deren Länge
