2012-08-02 16 views
9

Używam getattr do wywoływania różnych funkcji w zależności od zmiennej.Python za pomocą funkcji getattr do wywoływania o zmiennych parametrach

robię coś takiego:

getattr(foo, bar)() 

To działa jak wywołanie funkcji foo.bar()

Moim problemem jest to, że mam funkcji 'bar' i chcę nazywać go z inna parametry. Na przykład:

def f1() : 
    pass 

def f2(param1) : 
    pass 

def f3(param1,param2) : 
    pass 

tak 'bar' może być F1, F2 lub F3

Próbowałem to: assumming że params jest lista, która zawiera wszystkie parametry potrzebne do funkcji 'bar'

getattr(foo, bar) (for p in params :) 

ja oglądając rozwiązania „czysty”, bez potrzebne do oglądania długości na params zmiennej

Odpowiedz

16

można spróbować coś takiego:

getattr(foo, bar)(*params) 

Działa to, jeśli params jest listą lub krotką. Elementy z params zostanie rozpakowany w celu:

params=(1, 2) 
foo(*params) 

odpowiada:

params=(1, 2) 
foo(params[0], params[1]) 

Jeśli istnieją argumenty słów kluczowych, można to zrobić też.

getattr(foo, bar)(*params, **keyword_params) 

gdzie keyword_params jest słownikiem. Ta odpowiedź jest naprawdę niezależna od getattr. Będzie działać dla dowolnej funkcji/metody.

+2

Wiem, że OP nie pytał konkretnie, ale dodałem też '** kwargs', po prostu nie skończyłby z trudnymi do znalezienia błędów, gdyby spróbował użyć argumentów słów kluczowych. –

+0

@ sr2222 - Dodano. – mgilson

Powiązane problemy