(original) (raw)
On 14 May 2016 at 13:28, Guido van Rossum <gvanrossum@gmail.com> wrote:
On Sat, May 14, 2016 at 11:47 AM, Peter Ludemann <pludemann@google.com> wrote:I think that Type\[C,D\] would mean Union\[Type\[C\], Type\[D\]\], but I'm not sure ... I should probably talk to a typing expert about this.(Sorry for thinking out loud; but if we decide that Type\[C,D\] doesn't make sense, we need to prohibit it)It sounds iffy enough to prohibit.I suppose I'm asking: do we allow new\_user(Type\[BasicUser, ProUser\])?That looks like a call, but Type\[\] is something to use in the definition.Here's a trivial example that off the top of my head makes sense:BasicOrProUser = TypeVar('BasicOrProUser', BasicUser, ProUser)def new\_user(name: str, user\_factory: Type\[BasicOrProuser\]) -> BasicOrProUser:return user\_factory(name)That looks reasonable and only has one parameter to Type\[\].
So, should we allow this (by analogy to TypeVar allowing multiple types):
def new\_user(name: str, user\_factory: Type\[BasicUser, ProUser\]) -> Union\[BasicUser, ProUser\]:
return user\_factory(name)?
...
or should it be:
def new\_user(name: str,
user\_factory: Type\[
Union\[
BasicUser, ProUser\]
\]) -> Union\[BasicUser, ProUser\]: return user\_factory(name)
?
Although both of these lose the information that the output type is related to the input type; and hopefully the verbosity would encourage people to use TypeVar.
(From these examples, my preference is for Type to be limited to a single choice and anything more complicated should be done with TypeVar, Union, etc.)
Or must the Type\[...\] item have been defined with a TypeVar(..., bound=...), in which case multiple types aren't allowed with Type\[...\]?You can use whatever you want. If you want to write Type\[int\] go right ahead. Even Type\[Union\[int, str\]\] should be allowed. There is \*usually\* a good reason to use a type variable though -- without one the return type would be the base class. (But then again maybe that could be what you want, or you might not even have a return type, e.g. when the thing just gets thrown into the database.)--GuidoOn 14 May 2016 at 11:30, Guido van Rossum <gvanrossum@gmail.com> wrote:What would Type\[C, D\] mean?
--Guido (mobile)
On May 14, 2016 11:21 AM, "Peter Ludemann via Python-Dev" <python-dev@python.org> wrote:Is Type\[C,D\] allowed? Or should multiple types be restricted to TypeVar?
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: https://mail.python.org/mailman/options/python-dev/guido%40python.org
----Guido van Rossum (python.org/\~guido)