Zugriff auf Attribute

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.
Antworten
Martin Kalbfuß
User
Beiträge: 21
Registriert: Freitag 23. Mai 2008, 09:17

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?
fred.reichbier
User
Beiträge: 155
Registriert: Freitag 29. Dezember 2006, 18:27

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
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Sofern nicht der Name des Attributs zur Programmierzeit unbekannt ist (geht irgendwie aus deinem Text nicht hervor), könntest du das auch so machen:

Code: Alles auswählen

Attribute = [obj.Attribut for obj in Objekte]
Und bitte, halte dich an die Styleguides (pep 8), zumindest in sofern, dass Identifier klein geschrieben werden, sofern sie keine Klassen sind.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

@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)
fred.reichbier
User
Beiträge: 155
Registriert: Freitag 29. Dezember 2006, 18:27

Weil ich List Comprehensions so schön finde :K
Martin Kalbfuß
User
Beiträge: 21
Registriert: Freitag 23. Mai 2008, 09:17

Super. Diese Antworten waren mehr als ausreichend. Wieder was gelehrnt über Python.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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 :roll:
Antworten