Re: Can we create an_object = object() and add attribute like for a class?
- From: Pierre Rouleau <prouleau@xxxxxxxxxxxxxxxxxx>
- Date: Sat, 29 Apr 2006 18:54:32 -0400
Alex Martelli wrote:
Pierre Rouleau <prouleau@xxxxxxxxxxxxxxxxxx> 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...
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...
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...).
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
.
- Follow-Ups:
- Re: Can we create an_object = object() and add attribute like fora class?
- From: Fredrik Lundh
- Re: Can we create an_object = object() and add attribute like for a class?
- From: Alex Martelli
- Re: Can we create an_object = object() and add attribute like fora class?
- References:
- Can we create an_object = object() and add attribute like for a class?
- From: Pierre Rouleau
- Re: Can we create an_object = object() and add attribute like for a class?
- From: Alex Martelli
- Can we create an_object = object() and add attribute like for a class?
- Prev by Date: Re: self modifying code
- Next by Date: Re: best way to determine sequence ordering?
- Previous by thread: Re: Can we create an_object = object() and add attribute like for a class?
- Next by thread: Re: Can we create an_object = object() and add attribute like for a class?
- Index(es):
Relevant Pages
|