Factory for Struct-like classes

Dan Lenski dlenski at gmail.com
Mon Aug 18 11:28:53 EDT 2008


On Aug 13, 1:30 pm, Christian Heimes <li... at cheimes.de> wrote:
> Trynamedtuplehttp://code.activestate.com/recipes/500261/
>
> Anamedtupleimplementation is part of Python 2.6 and 3.0. For older
> versions of Python use the recipe from activestate.
>
> Christian

This named tuple recipe is pretty cool...  I think there may be a
slight bug in the Python docs, though.  The ActiveState page explains
that it avoids the overhead of a per-instance __dict__ by using the
__slots__ variable.  However, according to the most-recent Python
docs, __slots__ does *NOT* work with subclasses of list, str, or
tuple.

From http://docs.python.org/ref/slots.html#l2h-222:

# __slots__ do not work for classes derived from ``variable-length''
built-in types such as long, str and tuple.

On the other hand, nametuple does appear to work as advertised.

>>> Person=namedtuple.namedtuple('Person', ('name', 'age', 'height'))
>>> p=Person('Bob', 24, 1.86)
>>> p.name
'Bob'
>>> p.shoe_size
AttributeError: 'Person' object has no attribute 'shoe_size'
>>> p.__dict__
AttributeError: 'Person' object has no attribute '__dict__'

So is there a bug in the Python docs?  Does __slots__ in fact work
with subclasses of tuple?

Dan



More information about the Python-list mailing list