Can we create an_object = object() and add attribute like for a class?

Pierre Rouleau prouleau at impathnetworks.com
Sat Apr 29 18:54:32 EDT 2006


Alex Martelli wrote:

> Pierre Rouleau <prouleau at impathnetworks.com> 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),

Makes sense. I was under the impresssion that instances of type object 
did have a __dict__ but was hidden for some reason.  I should have known 
...  explicit is better than implicit...
> 
> 
>>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...).
> 
> 
That's what I do too, but sometimes i just want to have a quick holder 
attribute in a class and am lazy to do it.  I could declare one such 
class inside a module and import it but again, that means importing, 
name space of the module, etc...

I can understand the design decision not to give object a __dict__, but 
I wonder if i'd be a good idea to have a class that derives from object 
and has a __dict__ to be in the standard library.  I posted the original 
question because I run into this quite often and I just saw a post a 
little before mine ("self modifying code") where the idiom was used.

--

Pierre Rouleau



More information about the Python-list mailing list