Search code examples
pythonkeyword-argument

How to properly pass a dict of key/value args to kwargs?


I have the following:

class Foo:
        def __init__(self, **kwargs):
                print kwargs

settings = {foo:"bar"}
f = Foo(settings)

This generates an error:

Traceback (most recent call last):
  File "example.py", line 12, in <module>
    settings = {foo:"bar"}
NameError: name 'foo' is not defined

How do I properly pass a dict of key/value args to kwargs?


Solution

  • Use the **kw call convention:

    f = Foo(**settings)
    

    This works on any callable that takes keyword arguments:

    def foo(spam='eggs', bar=None):
        return spam, bar
    
    arguments = {'spam': 'ham', 'bar': 'baz'}
    print foo(**arguments)
    

    or you could just call the function with keyword arguments:

    f = Foo(foo="bar")
    foo(spam='ham', bar='baz')
    

    Your error is unrelated, you didn't define foo, you probably meant to make that a string:

    settings = {'foo': 'bar'}