On Fri, Jan 2, 2009 at 11:10 AM, spir <denis.s...@free.fr> wrote:
> Can someone explain the following?
>
> ============================
> class Type(object):
>        pass
> o = Type()
> o.a = 1
> print o, o.a
> print dir(object)
> ==> ['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__', 
> '__init__', '__new__',
> '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__']
> ==> no problem
> o = object()
> o.a = 1
> ==> AttributeError: 'object' object has no attribute 'a'
> ================================
>
> Type does not create any additional attribute or member, or what?
> Does this mean that the type 'object' has a hidden __slots__ attr?
> Then why doesn't Type inherit it, like any attribute?

I'm no expert on this so take this with salt...

IIUC the attributes of built-in objects are hard-coded in tables. The
hard-coded tables don't include __dict__ attributes so you can't add
attributes to instances of built-in types. This is similar to what
__slots__ does for user-defined classes though the implementation is
different.

The special behaviour of a class with a __slots__ attribute only
affects the class that defines __slots__, not subclasses. See
http://docs.python.org/reference/datamodel.html#id3: "The action of a
__slots__ declaration is limited to the class where it is defined. As
a result, subclasses will have a __dict__ unless they also define
__slots__."

Kent
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to