Seite 1 von 1

BeanUtils für Python?

Verfasst: Mittwoch 21. Februar 2007, 16:53
von timadlr
Hey zusammen,

ich komme aus der JavaWelt und arbeitete seit einigen Monaten mit Python. Im Moment im Webumfeld. Ich habe jetzt mehrfach den Fall, dass ich bestimmte werte an Objekten über den Namen des Attributest setzen würde.

D.h. bei einem Objekt Person zum Beispiel so:

Code: Alles auswählen

setAttribute(p,'name','Peter')
Bei Java gab es dazu die komfortablen Common BeanUtils-Klassen von Apache. Leider konnte ich bisher nichts Vergleichbares für Python finden.

Gibt es sowas?

Danke für jede Hilfe,

Tim

Verfasst: Mittwoch 21. Februar 2007, 17:05
von mq

Code: Alles auswählen

setattr(p, 'name', 'Peter')
? setattr() und getattr() sind builtins in Python. Und wenn du den Namen nicht erst zur Laufzeit kennst, kannst du natuerlich auch direkt

Code: Alles auswählen

p.name = 'Peter'
schreiben. Zugriffsbeschraenkungen und setter/getter gibt es in Python nicht (bzw, letztere sollte es nicht geben :D).

Verfasst: Mittwoch 21. Februar 2007, 17:05
von birkenfeld
Suchst du setattr?

Code: Alles auswählen

setattr(p, "name", "Peter")
Tut mir leid dass das in keiner komfortablen Klasse steckt, sondern builtin ist ;)

Verfasst: Mittwoch 21. Februar 2007, 17:14
von timadlr
Ja, die beiden kenne ich natürlich :)!
Bei Java gabs sowas ja auch. Nur diese BeanUtils-Klasse die machte nochmehr. Die checkte, ob es die Attribute überhaupt gab. Nahm Konversionen vor und sowas...aber scheint, als ob man das selber schreiben müsste, was ?

Verfasst: Mittwoch 21. Februar 2007, 17:17
von birkenfeld
Ob es ein Attribut "gibt", ist in Python unerheblich, da du Instanzen beliebige Attribute zuweisen kannst.

Du kannst natürlich eine entsprechende Funktion schreiben, aber die Frage ist ob es wirklich nötig ist...

Verfasst: Mittwoch 21. Februar 2007, 17:23
von mq
Ob es Attribute gibt, ist egal - beim Setzen kannst du (bis auf ein paar Spezialfaelle), wie birkenfeld schon sagte, jedes Attribut zuweisen. Beim Lesen kannst du getattr() ein optionales drittes Argument geben, das zurueckgegeben wird, falls das Attribut nicht existiert (sollten weder das Attribut noch das dritte Argument vorhanden sein, wird ein AttributeError ausgeloest). Konversion brauchst du in Python aus naheliegenden Gruenden nicht :)

Verfasst: Mittwoch 21. Februar 2007, 17:32
von birkenfeld
lumax hat geschrieben:Konversion brauchst du in Python aus naheliegenden Gruenden nicht :)
So würde ich das nicht formulieren -- schließlich ist Python strongly typed.

Verfasst: Mittwoch 21. Februar 2007, 17:38
von mq
birkenfeld hat geschrieben:So würde ich das nicht formulieren -- schließlich ist Python strongly typed.
Naja, okay. Aber wenn die Klasse da einen bestimmten Typ will, muss man manuell rausfinden, welcher das ist, oder sich darauf verlassen, dass schon ein Wert mit dem korrekten Typ vorhanden ist.

Verfasst: Mittwoch 21. Februar 2007, 17:40
von nkoehring
ich vermute Sarkasmus in deinem Post... kann das sein :roll:

Verfasst: Mittwoch 21. Februar 2007, 18:57
von mq
nkoehring hat geschrieben:ich vermute Sarkasmus in deinem Post... kann das sein :roll:
Wo denn? Ich seh da keinen (ernsthaft, kein Sarkasmus).

Verfasst: Donnerstag 22. Februar 2007, 13:35
von lunar
timadlr hat geschrieben:Ja, die beiden kenne ich natürlich :)!
Bei Java gabs sowas ja auch. Nur diese BeanUtils-Klasse die machte nochmehr. Die checkte, ob es die Attribute überhaupt gab.

Code: Alles auswählen

if hasattr(foo, 'bar'):
    setattr(foo, 'bar', 'hello world')
Nahm Konversionen vor und sowas...aber scheint, als ob man das selber schreiben müsste, was ?[/quote]

Fragt sich wofür du automatische Typ-Konvertierungen brauchst ...