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)?
question from:https://stackoverflow.com/questions/2280334/shortest-way-of-creating-an-object-with-arbitrary-attributes-in-python