[python] Funkce getattr, eval, vhodnost jejich použití

Martin Stiborský martin.stiborsky na gmail.com
Pátek Duben 4 23:32:31 CEST 2008


Dobrý večer.
Ve svém programu jsem potřeboval volat jednu z několika tříd, kterou,
to záviselo na volbě uživatele v GUI.
Chtěl bych poprosit o kritiku mého rešení.

Všechny třídy jsem měl po kupě v jednom adresáři, ten jsem si naimportoval.
Do proměnné se uloží název proměnné, podle volby z GUI.
Pomocí getattr se zavolá třída + metoda.

import balicek
choice = button.objectName()
foo = getattr(balicek , str(choice))
print foo().bar()

Vše funguje bez problémů. Ještě před tímto jsem to samé dal do kupy pomocí eval.

print eval("%s().foo()" % choice)

V tomto případě jsem si v __init__.py v adresáři s třídami
naimportoval všechny třídy.

Jaké jsou nevýhody eval() ? Je to celé vůbec košér, prosím o Vaše názory.

Děkuji velice.
-- 
S pozdravem
Martin Stiborský

Jabber: stibi na njs.netlab.cz
ICQ: 224-065-849


Další informace o konferenci Python