[Python-Dev] PEP 359: The "make" Statement

Steven Bethard steven.bethard at gmail.com
Thu Apr 13 21:47:41 CEST 2006


On 4/13/06, Ian D. Bollinger <ian.bollinger at gmail.com> wrote:
> I guess I fail to see how this syntax is a significant improvement over
> metaclasses (though __metaclass__ = xyz may not be the most aesthetic
> construct.)

It doesn't seem strange to you to have to use a *class* statement and
a __meta*class*__ hook to create something that's not a class at all? 
Consider

    >>> def get_dict(name, args, kwargs):
    ...     return kwargs
    ...
    >>> class C(object):
    ...     __metaclass__ = get_dict
    ...     x = 1
    ...     y = 2
    ...
    >>> C
    {'y': 2, 'x': 1, '__module__': '__main__', '__metaclass__':
<function get_dict at 0x00DB9F70>}

When I read a class statement, even if it specifies __metaclass__, I
assume that it will create a class object.  I believe the average
reader of Python code will make similar assumptions.  Sure, we can
abuse class/__metaclass__ to do something similar[1], but is that
really a good idea?

[1] Minor issue - you have to be okay with the class statement adding
__module__ and __metaclass__ to your dict.

Steve
--
Grammar am for people who can't think for myself.
        --- Bucky Katt, Get Fuzzy


More information about the Python-Dev mailing list