[Python-Dev] types.Union or types.UnionType?

923 views
Skip to first unread message

Serhiy Storchaka

unread,
Jul 25, 2021, 7:26:12 AM7/25/21
to pytho...@python.org
In 3.10 the union type (the type of the result of the | operator for
types) was added (https://www.python.org/dev/peps/pep-0604/). It is
exposed as types.Union. There are differences between typing.Union and
types.Union:

* typing.Union is indexable, types.Union is not.
* types.Union is a class, typing.Union is not.

types.Union corresponds to private class typing._UnionGenericAlias, not
typing.Union. It is confusing that typing.Union and types.Union have the
same name but are so different. Note also that most classes in the types
module have the "Type" suffix: FunctionType, MethodType, ModuleType,
etc. I think that it would be better to rename types.Union to
types.UnionType.

The name of types.Union is the part of already accepted PEP 604, so we
need to hear opinions of authors, sponsor and BDFL-delegate of the PEP.

I did not participate in the discussion about PEP 604 so I do not know
if there are arguments in favor of types.Union over types.UnionType.

_______________________________________________
Python-Dev mailing list -- pytho...@python.org
To unsubscribe send an email to python-d...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at https://mail.python.org/archives/list/pytho...@python.org/message/RHRF7Q25GQ3EIEUJHW72YLQNMCUDLWRW/
Code of Conduct: http://python.org/psf/codeofconduct/

Nick Coghlan

unread,
Jul 25, 2021, 7:27:55 PM7/25/21
to Serhiy Storchaka, python-dev


On Sun, 25 Jul 2021, 9:26 pm Serhiy Storchaka, <stor...@gmail.com> wrote:
In 3.10 the union type (the type of the result of the | operator for
types) was added (https://www.python.org/dev/peps/pep-0604/). It is
exposed as types.Union. There are differences between typing.Union and
types.Union:

* typing.Union is indexable, types.Union is not.
* types.Union is a class, typing.Union is not.

types.Union corresponds to private class typing._UnionGenericAlias, not
typing.Union. It is confusing that typing.Union and types.Union have the
same name but are so different. Note also that most classes in the types
module have the "Type" suffix: FunctionType, MethodType, ModuleType,
etc. I think that it would be better to rename types.Union to
types.UnionType.

If we wanted to be completely explicit, the most exact name would be "TypeUnionType": it is the type of object you get specifically when unioning types, not when unioning arbitrary objects.

Cheers,
Nick.


Guido van Rossum

unread,
Jul 26, 2021, 12:21:41 AM7/26/21
to Nick Coghlan, Serhiy Storchaka, python-dev
I don't think that's how we name things. (Though it's a great tongue twister. :-)

_______________________________________________
Python-Dev mailing list -- pytho...@python.org
To unsubscribe send an email to python-d...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/


--
--Guido van Rossum (python.org/~guido)

Luciano Ramalho

unread,
Jul 26, 2021, 9:36:45 AM7/26/21
to Serhiy Storchaka, Python-Dev
Great point, Serhiy.

I agree it would be very confusing to have types.Union and typing.Union.

types.UnionType, types.TypeUnionType, types.UnionTypeType all are much
better IMHO.

Cheers,

Luciano
--
Luciano Ramalho
| Author of Fluent Python (O'Reilly, 2015)
| http://shop.oreilly.com/product/0636920032519.do
| Technical Principal at ThoughtWorks
| Twitter: @ramalhoorg
_______________________________________________
Python-Dev mailing list -- pytho...@python.org
To unsubscribe send an email to python-d...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at https://mail.python.org/archives/list/pytho...@python.org/message/ZFQMCT2HEK2525BOBCJUFO73NGBZQCR7/
Reply all
Reply to author
Forward
0 new messages