BeanUtils für Python?

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
timadlr
User
Beiträge: 4
Registriert: Samstag 7. Oktober 2006, 00:17

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
Benutzeravatar
mq
User
Beiträge: 124
Registriert: Samstag 1. Januar 2005, 19:14

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).
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Suchst du setattr?

Code: Alles auswählen

setattr(p, "name", "Peter")
Tut mir leid dass das in keiner komfortablen Klasse steckt, sondern builtin ist ;)
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
timadlr
User
Beiträge: 4
Registriert: Samstag 7. Oktober 2006, 00:17

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 ?
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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...
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
mq
User
Beiträge: 124
Registriert: Samstag 1. Januar 2005, 19:14

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 :)
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
mq
User
Beiträge: 124
Registriert: Samstag 1. Januar 2005, 19:14

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.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

ich vermute Sarkasmus in deinem Post... kann das sein :roll:
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
mq
User
Beiträge: 124
Registriert: Samstag 1. Januar 2005, 19:14

nkoehring hat geschrieben:ich vermute Sarkasmus in deinem Post... kann das sein :roll:
Wo denn? Ich seh da keinen (ernsthaft, kein Sarkasmus).
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 ...
Antworten