[Python-ideas] A (meta)class algebra

Petr Viktorin encukou at gmail.com
Fri Feb 13 14:02:49 CET 2015


On Fri, Feb 13, 2015 at 12:59 PM, Nick Coghlan <ncoghlan at gmail.com> wrote:
> On 13 February 2015 at 20:55, Petr Viktorin <encukou at gmail.com> wrote:
>> On Fri, Feb 13, 2015 at 5:43 AM, Martin Teichmann
>>> This becomes even worse if you want to add a metaclass to a class.
>>> Then you have to change every class that inherits from it. Now you
>>> say that code with multiple metaclasses is a bad thing in general,
>>> but I don't agree. There are very simple examples where it makes
>>> a lot of sense. Say, you want to write a class with traits that
>>> implements an abstract base class. Wouldn't it be cool if you could
>>> write
>>
>> This is the one thing keeping metaclasses from being truly general –
>> using them limits inheritance.
>>
>> The problem is that metaclasses are too powerful.
>
> FWIW, that's why http://legacy.python.org/dev/peps/pep-0422/ exists -
> it aims to standardise Zope's notion of "class initialisers" so you
> can have definition time behaviour that gets inherited by subclasses
> (unlike explicit class decorators), without running the risk of
> introducing metaclass conflicts, and without making the metaclass
> system even more complicated.
>
> Then the cases that can be safely combined with other metaclasses
> would merely stop using a custom metaclass on 3.5+, and instead rely
> entirely on having an appropriate base class.
>
> The last round of reviews (back before 3.4 was released) raised a
> bunch of interesting questions/challenges, and then somebody (*cough*)
> decided it would be a good idea to go spend more time helping with
> PyPI ecosystem wrangling instead :)
>
> Regards,
> Nick.

Oh! I missed that PEP.

I think this is a much better way to go. It defines a simple thing,
rather than providing a way for a powerful thing to say "I'm simple!"
:)

Martin, would this proposal work for your needs?


More information about the Python-ideas mailing list