[Python-3000] rethinking pep 3115
Nick Coghlan
ncoghlan at gmail.com
Mon Jun 11 16:10:28 CEST 2007
Alex Martelli wrote:
>> (2)
>> the second-best solution i could think of is just passing the dict as a
>> keyword argument to the class, like so:
>>
>> class Spam(metaclass = Bacon, dict = {}):
>> ...
>>
>> so you could explicitly state you need a special dict.
>
> I like this one, with classdict being the keyword (dict is the name of
> a builtin type and we shouldn't encourage the frequent but iffy
> practice of 'overriding' builtin identifiers).
So instead of being able to write:
class MyStruct(Struct):
first = 1
second = 2
third = 3
everyone defining a Struct subclass has to write:
class MyStruct(Struct, classdict=OrderedDict()):
first = 1
second = 2
third = 3
Forgive my confusion, but exactly *how* is that meant to be an improvement?
The use of a special ordered dictionary should be an internal
implementation detail of the Struct class, and PEP 3115 makes it exactly
that. The PEP's approach means that simple cases, while possibly being
slightly harder to write, will 'just work' when it comes time to use
them, while more complicated cases involving multiple metaclasses should
still be possible.
I will also note that the PEP allows someone to write their own base
class which accepts the 'classdict' keyword argument if they so choose.
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
---------------------------------------------------------------
http://www.boredomandlaziness.org
More information about the Python-3000
mailing list