Often you want to just create an instance with nothing in it, then modify arbitrary values. According to the standard you should do: class Something: pass I propose the following better solution:
Python, 14 lines
1 2 3 4 5 6 7 8 9 10 11 12 13 14
class MutableInstance(dict): def __init__(self): self.__dict__ = self # This makes common tasks easier, not by much but conceptually it unifies things Foo = MutableInstance() Foo.x = 5 assert Foo['x'] == 5 Foo.y = 7 assert Foo.keys() == ['x', 'y'] assert Foo.values() == [5, 7] # And now you can pass it to anything that wants a dictionary too.
It's a suprisingly small but powerful change over just inheriting object (or nothing at all).
Care needed with allowing arbitrary attributes to be set. Consider Foo['keys'] == 5. Now you've clobbered your keys method. That's the reason why attribute access and dictionary lookup are separate mechanisms and have separate namespaces. Generally dictionaries should be used for arbitrary fields.