But on calling `type` in this way, you are passing the namespace as a
ready object, as the
3rdy parameter - what would `__prepare__` even do, besides print it's
been called?

For sometime (maybe Python 3.3, I forgot), some helper
callables where added to the `types` module to allow
one to have more freedom in imperatively created classes:

 ````python

In [20]: types.prepare_class?
Signature: types.prepare_class(name, bases=(), kwds=None)
Docstring:
Call the __prepare__ method of the appropriate metaclass.

Returns (metaclass, namespace, kwds) as a 3-tuple

*metaclass* is the appropriate metaclass
*namespace* is the prepared class namespace
*kwds* is an updated copy of the passed in kwds argument with any
'metaclass' entry removed. If no kwds argument is passed in, this will
be an empty dict.
File:      ~/projetos/terminedia/env/lib64/python3.7/types.py
Type:      function

In [21]: types.new_class?
Signature: types.new_class(name, bases=(), kwds=None, exec_body=None)
Docstring: Create a class object dynamically using the appropriate metaclass.
File:      ~/projetos/terminedia/env/lib64/python3.7/types.py
Type:      function

In [22]: types.resolve_bases?
Signature: types.resolve_bases(bases)
Docstring: Resolve MRO entries dynamically as specified by PEP 560.
File:      ~/projetos/terminedia/env/lib64/python3.7/types.py
Type:      function
```

On Mon, 1 Jun 2020 at 16:28, 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/IPBWREEI6JYGWROTSXGHBWLG53Q4A23A/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to