It's not a bug, it's just bypassing steps in the Py3 dynamic class
definition process.

https://docs.python.org/3/library/types.html#types.new_class is the API to
use to invoke the full metaclass machinery, including namespace preparation.

https://docs.python.org/3/reference/datamodel.html#metaclasses goes into
more detail on how that works (calling the metaclass constructor is the
last step, after the namespace has already been prepared and populated).

Cheers,
Nick.

On Tue., 2 Jun. 2020, 5:22 am Ethan Furman, <et...@stoneleaf.us> wrote:

>  From stackoverflow [1]
>
>    # metaprepare.py
>    class Meta1(type):
>        @classmethod
>        def __prepare__(mcs, name, bases):
>            print('call prepare')
>            return {}
>        def __new__(mcs, name, bases, parameters):
>            return super().__new__(mcs, name, bases, parameters)
>
>    class A(metaclass=Meta1):
>        pass
>
>    type('C', (A, ), {})
>
> output is:
>
>    call prepare
>
> (just the once, not twice)
>
> The behavior of `type()` not calling `__prepare__()` has been constant
> since 3.3.
>
> Is it a bug?
>
>
> --
> ~Ethan~
>
>
> [1] https://stackoverflow.com/q/62128254/208880
> _______________________________________________
> Python-Dev mailing list -- python-dev@python.org
> To unsubscribe send an email to python-dev-le...@python.org
> https://mail.python.org/mailman3/lists/python-dev.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-dev@python.org/message/CQTD7WFOIDBF5PSD77AALBTWJQ67UPM5/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/SMBMNS6H76BJ4SQBDY7XV5YWQFYSCBWK/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to