[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