2013-04-11 23 views
6

Próbuję znaleźć sposób na przechodzenie przez plik konfiguracyjny json i użyć nazwy klucza jako nazwy argumentu metody, która używa ** kwargs. Stworzyłem plik konfiguracyjny json i użyłem nazw kluczy jako metod. Właśnie dodaję "set_" do nazwy klucza, aby wywołać prawidłową metodę. Konwertuję json do słownika, aby przechwytywał dowolne wartości domyślne. Chcę przekazać nazwy argumentów do ** kwargs za pomocą zmiennej łańcuchowej. Próbowałem przekazać słownik, ale nie wydaje mi się, że tak jest.Użyj zmiennej łańcuchowej ** kwargs jako nazwanego argumentu

user_defaults = config['default_users'][user] 

for option_name, option_value in user_defaults.iteritems(): 
    method = "set_" + option_name 
    callable_method = getattr(self, method) 
    callable_method(user = user, option_name = user_defaults[option_name]) 

Wywołanie metody callable_method powyżej przekazuje "option_name" jako rzeczywistą nazwę kwarg. Chcę przekazać go tak, że gdy "shell" = option_name, zostanie przekazana jako nazwa ciągu dla nazwy argumentu. Przykład znajduje się poniżej. W ten sposób mogę przechodzić przez klawisze w konfiguracji i nie martwić się o to, czego szukam w jakiejkolwiek metodzie, którą piszę, aby coś osiągnąć.

def set_shell(self, **kwargs): 
    user = kwargs['user'] 
    shell = kwargs['shell'] 

    ## Do things now with stuff 

Każda pomoc jest doceniona Jestem nowym użytkownikiem Pythona i wciąż uczę się, jak robić rzeczy w sposób pytonowy.

Odpowiedz

19

Jeśli dobrze rozumiem, o co prosisz, możesz po prostu użyć składni ** po stronie połączenia, aby przekazać dyktat, który jest konwertowany na kwargs.

callable_method(user=user, **{option_name: user_defaults[option_name]}) 
+0

To niesamowite, właśnie tego szukałem. Dziękuję za szybką odpowiedź. – lumberjacked

Powiązane problemy