There's one new feature I'd like to add to PEP 484 and the typing.py module that will go out with Python 3.5.2.

There's a long discssion in https://github.com/python/typing/issues/107, but I think I can explain the proposal very quickly.

There's currently no good way to talk about class objects. If you have a function argument that's a class (as opposed to an instance) the only annotation you can give it is `type`. But I've encountered this pattern quite frequently, and what people invariably want to say is "it's a subclass of this here class C." Example:

class User: ...
class TeamUser(User): ...
class ProUser(User): ...
def new_user(user_class: Type[User]) -> User: ...

The proposal is to let you spell that explicitly by setting the type or such an argument to `Type[C]`. The type checker will then understand that if you call it, the result is an instance of C. It will also know about all the class methods defined on C.

There are some subtleties, e.g. in the above example we would actually like to know that the return type varies with the argument type:

joe = new_user(ProUser)  # Really, joe is a ProUser, not just a User

This can be done using a type variable, e.g.

U = TypeVar('U', bound=User)
def new_user(user_class: Type[U]) -> U: ...
joe = new_user(ProUser)

The key part I want to settle quickly is the notation: I need to add a special generic `class Type` to typing.py so that we can start implementing this in mypy.

Any objections? Or should I just go ahead and add the text to PEP 484 and post the diff to python-dev?

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