Shortest way of creating an object with arbitrary attributes in Python?
python
Solution
The original code can be streamlined a little by using `__dict__`:
In [1]: class data:
...: def __init__(self, **kwargs):
...: self.__dict__.update(kwargs)
...:
In [2]: d = data(foo=1, bar=2)
In [3]: d.foo
Out[3]: 1
In [4]: d.bar
Out[4]: 2
In Python 3.3 and greater, this syntax is made available by the `types.SimpleNamespace` class.
Problem
Hey, I just started wondering about this as I came upon a code that expected an object with a certain set of attributes (but with no specification of what type this object should be). One solution would be to create a new class that has the attributes the code expects, but as I call other code that also needs objects with (other) attributes, I'd have to create more and more classes. A shorter solution is to create a generic class, and then set the attributes on instances of it (for those who thought of using an instance of `object` instead of creating a new class, that won't work since `object` instances don't allow new attributes). The last, shortest solution I came up with was to create a class with a constructor that takes keyword arguments, just like the `dict` constructor, and then sets them as attributes: ``` class data: def __init__(self, **kw): for name in kw: setattr(self, name, kw[name]) options = data(do_good_stuff=True, do_bad_stuff=False) ``` But I can't help feeling like I've missed something obvious... Isn't there a built-in way to do this (preferably supported in Python 2.5)?