gh-96130: Rephrase use of "typecheck" verb for clarity (#98144)

I'm sympathetic to the issue report, especially in case this helps
clarify to new users that Python itself does not do type checking at runtime
This commit is contained in:
Shantanu 2022-10-11 19:37:58 -07:00 committed by GitHub
parent f5d71073e6
commit ed6344eed0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -105,7 +105,7 @@ A type alias is defined by assigning the type to the alias. In this example,
def scale(scalar: float, vector: Vector) -> Vector: def scale(scalar: float, vector: Vector) -> Vector:
return [scalar * num for num in vector] return [scalar * num for num in vector]
# typechecks; a list of floats qualifies as a Vector. # passes type checking; a list of floats qualifies as a Vector.
new_vector = scale(2.0, [1.0, -4.2, 5.4]) new_vector = scale(2.0, [1.0, -4.2, 5.4])
Type aliases are useful for simplifying complex type signatures. For example:: Type aliases are useful for simplifying complex type signatures. For example::
@ -147,10 +147,10 @@ of the original type. This is useful in helping catch logical errors::
def get_user_name(user_id: UserId) -> str: def get_user_name(user_id: UserId) -> str:
... ...
# typechecks # passes type checking
user_a = get_user_name(UserId(42351)) user_a = get_user_name(UserId(42351))
# does not typecheck; an int is not a UserId # fails type checking; an int is not a UserId
user_b = get_user_name(-1) user_b = get_user_name(-1)
You may still perform all ``int`` operations on a variable of type ``UserId``, You may still perform all ``int`` operations on a variable of type ``UserId``,
@ -176,7 +176,7 @@ It is invalid to create a subtype of ``Derived``::
UserId = NewType('UserId', int) UserId = NewType('UserId', int)
# Fails at runtime and does not typecheck # Fails at runtime and does not pass type checking
class AdminUserId(UserId): pass class AdminUserId(UserId): pass
However, it is possible to create a :class:`NewType` based on a 'derived' ``NewType``:: However, it is possible to create a :class:`NewType` based on a 'derived' ``NewType``::
@ -463,7 +463,7 @@ value of type :data:`Any` and assign it to any variable::
s = a # OK s = a # OK
def foo(item: Any) -> int: def foo(item: Any) -> int:
# Typechecks; 'item' could be any type, # Passes type checking; 'item' could be any type,
# and that type might have a 'bar' method # and that type might have a 'bar' method
item.bar() item.bar()
... ...
@ -500,20 +500,20 @@ reject almost all operations on it, and assigning it to a variable (or using
it as a return value) of a more specialized type is a type error. For example:: it as a return value) of a more specialized type is a type error. For example::
def hash_a(item: object) -> int: def hash_a(item: object) -> int:
# Fails; an object does not have a 'magic' method. # Fails type checking; an object does not have a 'magic' method.
item.magic() item.magic()
... ...
def hash_b(item: Any) -> int: def hash_b(item: Any) -> int:
# Typechecks # Passes type checking
item.magic() item.magic()
... ...
# Typechecks, since ints and strs are subclasses of object # Passes type checking, since ints and strs are subclasses of object
hash_a(42) hash_a(42)
hash_a("foo") hash_a("foo")
# Typechecks, since Any is compatible with all types # Passes type checking, since Any is compatible with all types
hash_b(42) hash_b(42)
hash_b("foo") hash_b("foo")