cpython: cbcab1fb1b8a (original) (raw)

Mercurial > cpython

changeset 102557:cbcab1fb1b8a 3.5

Better docs for typing.Any by Michael Lee. Fixes issue #27688. [#27688]

Guido van Rossum guido@python.org
date Sat, 06 Aug 2016 13:46:48 -0700
parents d0402caa0ef5
children f60e16663f6e e947248100ae
files Doc/library/typing.rst
diffstat 1 files changed, 71 insertions(+), 9 deletions(-)[+] [-] Doc/library/typing.rst 80

line wrap: on

line diff

--- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -279,17 +279,79 @@ conflict. Generic metaclasses are not s The :class:Any type --------------------- -A special kind of type is :class:Any. Every type is a subtype of -:class:Any. This is also true for the builtin type object. However, to the -static type checker these are completely different. +A special kind of type is :class:Any. A static type checker will treat +every type as being compatible with :class:Any and :class:Any as being +compatible with every type. + +This means that it is possible to perform any operation or method call on a +value of type on :class:Any and assign it to any variable:: +

+ +Notice that no typechecking is performed when assigning a value of type +:class:Any to a more precise type. For example, the static type checker did +not report an error when assigning a to s even though s was +declared to be of type :class:str and receives an :class:int value at +runtime + +Furthermore, all functions without a return type or parameter types will +implicitly default to using :class:Any:: +

-When the type of a value is :class:object, the type checker will 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. On the other hand, -when a value has type :class:Any, the type checker will allow all operations -on it, and a value of type :class:Any can be assigned to a variable (or used -as a return value) of a more constrained type.

+ +This behavior allows :class:Any to be used as an escape hatch when you +need to mix dynamically and statically typed code. + +Contrast the behavior of :class:Any with the behavior of :class:object. +Similar to :class:Any, every type is a subtype of :class:object. However, +unlike :class:Any, the reverse is not true: :class:object is not a +subtype of every other type. + +That means when the type of a value is :class:object, a type checker will +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::

+

+

+Use :class:object to indicate that a value could be any type in a typesafe +manner. Use :class:Any to indicate that a value is dynamically typed. Classes, functions, and decorators ----------------------------------