Kaip geriausiai iškviesti funkciją, jei programoje "Python" yra eilutė su funkcijos pavadinimu. Tarkime, turiu modulį foo
ir eilutę, kurios turinys yra "bar"
. Kaip geriausia iškviesti foo.bar()
?
Man reikia gauti funkcijos grįžtamąją vertę, todėl nenoriu tiesiog naudoti eval
. Supratau, kaip tai padaryti naudojant eval
apibrėžti laikinąją funkciją, kuri grąžina tos funkcijos iškvietimo rezultatą, bet tikiuosi, kad yra elegantiškesnis būdas tai padaryti.
Daroma prielaida, kad modulis foo
su metodu bar
:
import foo
method_to_call = getattr(foo, 'bar')
result = method_to_call()
Galite sutrumpinti 2 ir 3 eilutes iki:
result = getattr(foo, 'bar')()
jei tai būtų prasmingiau jūsų naudojimo atvejui.
Tokiu būdu getattr
galite naudoti su klasės egzemplioriumi susietiems metodams, modulio lygmens metodams, klasės metodams... sąrašą galima tęsti.
Patrick's sprendimas yra bene švariausias. Jei reikia dinamiškai paimti ir modulį, galite jį importuoti taip:
module = __import__('foo')
func = getattr(module, 'bar')
func()