Вопрос

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?

Это было полезно?

Решение

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'}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top