Kāds ir labākais veids, kā izsaukt funkciju, ja Python programmā ir dota virkne ar funkcijas nosaukumu. Piemēram, teiksim, ka man ir modulis foo
, un man ir virkne, kuras saturs ir "bar"
. Kāds ir labākais veids, kā izsaukt foo.bar()
?
Man vajag iegūt funkcijas atgriešanas vērtību, tāpēc es neizmantoju vienkārši eval
. Es sapratu, kā to izdarīt, izmantojot eval
, lai definētu pagaidu funkciju, kas atdod šīs funkcijas izsaukuma rezultātu, bet es ceru, ka ir kāds elegantāks veids, kā to izdarīt.
Pieņemot moduli foo
ar metodi bar
:
import foo
method_to_call = getattr(foo, 'bar')
result = method_to_call()
Jūs varētu saīsināt 2. un 3. rindu līdz:
result = getattr(foo, 'bar')()
ja tas jūsu lietošanas gadījumam ir lietderīgāk.
Šādā veidā getattr
var izmantot ar klases instanci saistītām metodēm, moduļa līmeņa metodēm, klases metodēm... sarakstu var turpināt.
Patrika piedāvātais risinājums, iespējams, ir tīrākais. Ja jums ir nepieciešams dinamiski uzņemt arī moduli, varat to importēt šādi:
module = __import__('foo')
func = getattr(module, 'bar')
func()