No, it's not possible, because

>>> int | str
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for |: 'type' and 'type'

Regards

Philippe Prados


Le jeu. 29 août 2019 à 14:55, Inada Naoki <songofaca...@gmail.com> a écrit :

> I don't want to add runtime behaviors for static type hinting.
>
> There is PEP 563 instead.
> Tools like mypy can implement them without touching runtime behavior.
>
>
> On Thu, Aug 29, 2019 at 9:48 PM Philippe Prados <philippe.pra...@gmail.com>
> wrote:
>
>> Hello everybody,
>>
>> Scala 3 propose the a new syntax for Union type. See here
>> <https://dotty.epfl.ch/docs/reference/new-types/union-types.html>. I
>> propose to add a similar syntax in Python.
>>
>> # Operator for Union
>> assert( int | str == Union[int,str])
>> assert( int | str | float == Union[int,str,float])
>> # Operator for Optional
>> assert( ~int == Optional[int])
>>
>> Now, it's possible to write:
>>
>> def fn(bag:List[int | str], option: ~int = None) -> float | str: ...
>>
>> in place of
>>
>> def fn(bag:List[Option[int,str]], option: Optional[int] = None) ->
>> Union[float,str]: ...
>>
>> I think these syntaxes are more clear, and can help with the adoption of
>> typing.
>>
>>
>> I test and implement these ideas in a two fork : One for CPython
>> <https://github.com/pprados/cpython> and one for MyPy
>> <https://github.com/pprados/mypy>. See the branches add_OR_to_types (for
>> Union syntax) or add_INVERT_to_types (for Union and Optional syntax).
>>
>> How I implement that ? I add the operators __or__ and __revert__ to
>> PyType_Type. The C code is similar of :
>>
>> from typing import *
>> def type_or(self,right):
>>   return Union[self,right]
>> type(type).__or__ = type_or
>>
>> Actually, the accepted syntax for typing is :
>>
>> annotation: name_type
>> name_type: NAME (args)?
>> args: '[' paramslist ']'
>> paramslist: annotation (',' annotation)* [',']
>>
>> I propose to extend the syntax to :
>>
>> annotation: ( name_type | or_type | invert_type )
>> name_type: NAME (args)?
>> args: '[' paramslist ']'
>> paramslist: annotation (',' annotation)* [',']
>>
>> or_type: name_type '|' annotation
>>
>> invert_type: '~' annotation
>>
>>
>> What do you think about that ?
>>
>> The draft of a PEP is here
>> <https://github.com/pprados/peps/blob/master/pep-9999.rst>.
>>
>> Regards
>> _______________________________________________
>> Python-ideas mailing list -- python-ideas@python.org
>> To unsubscribe send an email to python-ideas-le...@python.org
>> https://mail.python.org/mailman3/lists/python-ideas.python.org/
>> Message archived at
>> https://mail.python.org/archives/list/python-ideas@python.org/message/FCTXGDT2NNKRJQ6CDEPWUXHVG2AAQZZY/
>> Code of Conduct: http://python.org/psf/codeofconduct/
>>
>
>
> --
> Inada Naoki  <songofaca...@gmail.com>
>
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/XMJ4OTM3MSGV2DLJAMKMWG5ACKKWV7PW/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to