Pierre Rouleau <[EMAIL PROTECTED]> wrote: > Hi all, > > Is there any reason that under Python you cannot instantiate the object > class and create any attributes like you would be able for a normal class?
Yep: instances of type object do not have a __dict__ and therefore there is no place to put any attributes. This is necessary to allow ANY subclass of object, and thus any type whatsoever, to lack a per-instance __dict__ (and thus to save its per-instance memory costs), since by the principle of inheritance (known as Liskov substutition, or also as the "IS-A" rule) a subclass cannot _remove_ superclass attributes, so if the universal superclass had a __dict__ so would every type in Python. > Being able to do it would seem a natural way of declaring namespaces. I find that ns = type('somename', (), dict(anattribute=23)) isn't too bad to make a namespace ns, though it has some undesirable issues (e.g., ns is implicitly callable, which may make little sense for a namespace). At any rate, any natural way of declaring a namespace SHOULD allow arbitrary named arguments in the instantiation call -- bending principles to give each instance of object a __dict__ would still not fix that, so that wouldn't do much. I think it's worth the minor bother to write out something like class Namespace(object): def __init__(self, **kwds): self.__dict__ = kwds and I generally go further anyway, by defining at least a repr that shows the attributes' names and values (very useful for debugging...). Alex -- http://mail.python.org/mailman/listinfo/python-list