On 14 May 2016 at 13:28, Guido van Rossum <gvanros...@gmail.com> wrote:
> On Sat, May 14, 2016 at 11:47 AM, Peter Ludemann <pludem...@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.) > > --Guido > > >> >> >> On 14 May 2016 at 11:30, Guido van Rossum <gvanros...@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) >
_______________________________________________ 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/archive%40mail-archive.com