[Python-3000] PEP for Metaclasses in Python 3000

Steven Bethard steven.bethard at gmail.com
Tue Mar 13 04:32:30 CET 2007


On 3/12/07, Steven Bethard <steven.bethard at gmail.com> wrote:
> the signature of the method called will be::
>     __prepare__(name, args, kwargs)
> not
>     __prepare__(name, *args, **kwargs)
> right?

On 3/12/07, Guido van Rossum <guido at python.org> wrote:
> I'm not sure anyone has thought much about it yet. I wonder
> if the call shouldn't be made like this:
>
> __prepare__(name, bases, **kwargs)
>
> so that if you only expect certain specific keyword args you can
> define it like this:
>
> def __prepare__(name, base, metaclass=X): ...

Yeah, seems like **kwargs would be more useful in practice.
Initially, I was concerned that this would break the symmetry with the
__metaclass__ signature::

    def __metaclass__(name, bases, bodydict):
    def __prepare__(name, bases, kwargs):

But then I realized that there's really no need for any symmetry here
-- they're getting passed two different things (kwargs != bodydict)
and they're serving two pretty different purposes.

I think there might be a parallel argument for passing in the bases as
*args instead of as a tuple.  If you want to write a metaclass that
expects exactly zero or one base classes, you could then write::

    def __prepare__(name, **kwargs):
    def __prepare__(name, base, **kwargs):


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-3000 mailing list