Blixt Blixt - 3 months ago 7x
Python Question

Shortest way of creating an object with arbitrary attributes in Python?

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

instead of creating a new class, that won't work since
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
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)?


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]:
Out[3]: 1

In [4]:
Out[4]: 2