Make all single-constraint TypeVars to use bounds

According to the documentation in the typing module, TypeVars cannot
have only a single constraint. Attempting to do so will actually result
in an exception at runtime. (However, this error is currently ignored
by mypy -- see https://github.com/python/mypy/pull/2626 for a related
pending pull request).

This commit changes all instances of TypeVars using a single constraint
(e.g. `T = TypeVar('T', Foo)`) to use bounds instead (e.g.
`T = TypeVar('T', bound=Foo)`.

This seems to be the correct fix for plistlib after reading the module
docs, but it's less obvious this is correct for unittest. The unittest
module originally had `_FT = TypeVar('_FT', Callable[[Any], Any])` -- an
alternative fix would have been to do `_FT = Callable[[Any], Any]`.

Although I'm not entirely sure what it means to have a bound be a
Callable, I decided to make the assumption that the original authors
probably meant to use TypeVars instead of type aliases for a reason
(possibly to handle classes implementing `__call__`?)
This commit is contained in:
Michael Lee
2016-12-31 22:16:53 -08:00
committed by Łukasz Langa
parent c34f11d569
commit b46366e77d
2 changed files with 2 additions and 2 deletions

View File

@@ -12,7 +12,7 @@ from contextlib import ContextManager
_T = TypeVar('_T')
_FT = TypeVar('_FT', Callable[[Any], Any])
_FT = TypeVar('_FT', bound=Callable[[Any], Any])
def skip(reason: str) -> Callable[[_FT], _FT]: ...