2014-08-27 2 views
3

У меня есть следующие функции экземпляраЕсть ли способ, чтобы избежать ключевых слов в kwargs

class MyClass: 

    def __init__(self): 
     self.request = dict() 

    def my_func(self, **kwargs): 
     self.request['arguments'] = kwargs 

И я хочу, чтобы использовать его, как показано ниже:

obj = MyClass() 
obj.my_func(global = True) 

Как вы можете видеть, я хотел бы использовать ключевое слово Python в качестве ключевого значения на kwargs. Я знаю, что это синтаксическая ошибка. Интересно, есть ли способ избежать этого, чтобы можно было создать kwargs со значением {'global':True}.

В официальных документах я не мог найти ничего подобного. Я ожидал, что их можно избежать, так как kwargs ключи имеют тип string.

+0

@jonrsharpe Это будет частью публичного API для протокола сетевых сообщений, поэтому я ожидал, что красивое решение передаст необязательные аргументы в сообщение/объект запроса. Это одно решение, спасибо. – mostruash

+1

@jonrsharpe Любая причина опубликовать это как комментарий, а не ответ? – chepner

+0

Почему бы просто не добавить необязательные аргументы в методе init по умолчанию для False? –

ответ

5

Единственный способ можно использовать ключевые слова Python как имена ключевых слов аргумент является распаковка словаря:

instance.my_func(**{'global': True}) 

В качестве альтернативы, переименовывать аргумент (например, к global_).

Смежные вопросы