[Python-ideas] Proposal to add new built-in struct (was: Add kwargs to built-in function object)

Steven Bethard steven.bethard at gmail.com
Sat May 24 22:40:11 CEST 2008


On Fri, May 23, 2008 at 12:51 AM, George Sakkis <george.sakkis at gmail.com> wrote:
> On Thu, May 22, 2008 at 9:59 PM, Greg Ewing <greg.ewing at canterbury.ac.nz> wrote:
>
>> On Thu, May 22, 2008 at 7:15 PM, Leif Walsh <adlaiff6 at gmail.com> wrote:
>>>
>>> I think it makes the most sense, if this construct is adopted, to use
>>> __slots__ to control mutability.
>>
>> That wouldn't work, because the slots that a class has
>> are fixed when the class is defined. Changing __slots__
>> subsequent to that doesn't affect anything.
>
> Unless you generate the class on the fly with a class factory, like
> namedtuple. Actually I prefer a metaclass factory, to avoid the
> repetition of the class name:
>
>        >>> class Foo(object):
>        ...           __metaclass__ = RecordType('x y z is_on',
> field_defaults={'is_on':False}, default=0.0)
>        >>> a = Foo()
>        >>> a
>        Foo(x=0.0, y=0.0, z=0.0, is_on=False)
>        >>> a.__slots__
>        ('x', 'y', 'z', 'is_on')
>        >>> a.__dict__
>        Traceback (most recent call last):
>        AttributeError: 'Foo' object has no attribute '__dict__'

The recipe here does roughly that (though without the defaulting extras):

    http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/502237

Note however that use of __slots__ is still controversial. (Because
it's really only appropriate if you plan to make many of these objects
and you want to keep memory consumption down.)

Steve
-- 
I'm not *in*-sane. Indeed, I am so far *out* of sane that you appear a
tiny blip on the distant coast of sanity.
 --- Bucky Katt, Get Fuzzy



More information about the Python-ideas mailing list