~dkuhlman/python-training-materials/Materials

« back to all changes in this revision

Viewing changes to python-3.5.1-docs-html/library/typing.html

  • Committer: Dave Kuhlman
  • Date: 2017-04-15 16:24:56 UTC
  • Revision ID: dkuhlman@davekuhlman.org-20170415162456-iav9vozzg4iwqwv3
Updated docs

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
 
 
4
 
 
5
 
<html xmlns="http://www.w3.org/1999/xhtml">
6
 
  <head>
7
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8
 
    
9
 
    <title>26.1. typing — Support for type hints &mdash; Python 3.5.1 documentation</title>
10
 
    
11
 
    <link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
12
 
    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
13
 
    
14
 
    <script type="text/javascript">
15
 
      var DOCUMENTATION_OPTIONS = {
16
 
        URL_ROOT:    '../',
17
 
        VERSION:     '3.5.1',
18
 
        COLLAPSE_INDEX: false,
19
 
        FILE_SUFFIX: '.html',
20
 
        HAS_SOURCE:  true
21
 
      };
22
 
    </script>
23
 
    <script type="text/javascript" src="../_static/jquery.js"></script>
24
 
    <script type="text/javascript" src="../_static/underscore.js"></script>
25
 
    <script type="text/javascript" src="../_static/doctools.js"></script>
26
 
    <script type="text/javascript" src="../_static/sidebar.js"></script>
27
 
    <link rel="search" type="application/opensearchdescription+xml"
28
 
          title="Search within Python 3.5.1 documentation"
29
 
          href="../_static/opensearch.xml"/>
30
 
    <link rel="author" title="About these documents" href="../about.html" />
31
 
    <link rel="copyright" title="Copyright" href="../copyright.html" />
32
 
    <link rel="top" title="Python 3.5.1 documentation" href="../contents.html" />
33
 
    <link rel="up" title="26. Development Tools" href="development.html" />
34
 
    <link rel="next" title="26.2. pydoc — Documentation generator and online help system" href="pydoc.html" />
35
 
    <link rel="prev" title="26. Development Tools" href="development.html" />
36
 
    <link rel="shortcut icon" type="image/png" href="../_static/py.png" />
37
 
    <script type="text/javascript" src="../_static/copybutton.js"></script>
38
 
    <script type="text/javascript" src="../_static/version_switch.js"></script>
39
 
    
40
 
 
41
 
 
42
 
  </head>
43
 
  <body role="document">  
44
 
    <div class="related" role="navigation" aria-label="related navigation">
45
 
      <h3>Navigation</h3>
46
 
      <ul>
47
 
        <li class="right" style="margin-right: 10px">
48
 
          <a href="../genindex.html" title="General Index"
49
 
             accesskey="I">index</a></li>
50
 
        <li class="right" >
51
 
          <a href="../py-modindex.html" title="Python Module Index"
52
 
             >modules</a> |</li>
53
 
        <li class="right" >
54
 
          <a href="pydoc.html" title="26.2. pydoc — Documentation generator and online help system"
55
 
             accesskey="N">next</a> |</li>
56
 
        <li class="right" >
57
 
          <a href="development.html" title="26. Development Tools"
58
 
             accesskey="P">previous</a> |</li>
59
 
        <li><img src="../_static/py.png" alt=""
60
 
                 style="vertical-align: middle; margin-top: -1px"/></li>
61
 
        <li><a href="https://www.python.org/">Python</a> &raquo;</li>
62
 
        <li>
63
 
          <span class="version_switcher_placeholder">3.5.1</span>
64
 
          <a href="../index.html">Documentation </a> &raquo;
65
 
        </li>
66
 
 
67
 
          <li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> &raquo;</li>
68
 
          <li class="nav-item nav-item-2"><a href="development.html" accesskey="U">26. Development Tools</a> &raquo;</li> 
69
 
      </ul>
70
 
    </div>    
71
 
 
72
 
    <div class="document">
73
 
      <div class="documentwrapper">
74
 
        <div class="bodywrapper">
75
 
          <div class="body" role="main">
76
 
            
77
 
  <div class="section" id="module-typing">
78
 
<span id="typing-support-for-type-hints"></span><h1>26.1. <a class="reference internal" href="#module-typing" title="typing: Support for type hints (see PEP 484)."><code class="xref py py-mod docutils literal"><span class="pre">typing</span></code></a> &#8212; Support for type hints<a class="headerlink" href="#module-typing" title="Permalink to this headline">¶</a></h1>
79
 
<p><strong>Source code:</strong> <a class="reference external" href="https://hg.python.org/cpython/file/3.5/Lib/typing.py">Lib/typing.py</a></p>
80
 
<hr class="docutils" />
81
 
<p>This module supports type hints as specified by <span class="target" id="index-0"></span><a class="pep reference external" href="https://www.python.org/dev/peps/pep-0484"><strong>PEP 484</strong></a>.  The most
82
 
fundamental support consists of the type <a class="reference internal" href="#typing.Any" title="typing.Any"><code class="xref py py-class docutils literal"><span class="pre">Any</span></code></a>, <a class="reference internal" href="#typing.Union" title="typing.Union"><code class="xref py py-class docutils literal"><span class="pre">Union</span></code></a>,
83
 
<a class="reference internal" href="#typing.Tuple" title="typing.Tuple"><code class="xref py py-class docutils literal"><span class="pre">Tuple</span></code></a>, <a class="reference internal" href="#typing.Callable" title="typing.Callable"><code class="xref py py-class docutils literal"><span class="pre">Callable</span></code></a>, <a class="reference internal" href="#typing.TypeVar" title="typing.TypeVar"><code class="xref py py-class docutils literal"><span class="pre">TypeVar</span></code></a>, and
84
 
<a class="reference internal" href="#typing.Generic" title="typing.Generic"><code class="xref py py-class docutils literal"><span class="pre">Generic</span></code></a>.  For full specification please see <span class="target" id="index-1"></span><a class="pep reference external" href="https://www.python.org/dev/peps/pep-0484"><strong>PEP 484</strong></a>.  For
85
 
a simplified introduction to type hints see <span class="target" id="index-2"></span><a class="pep reference external" href="https://www.python.org/dev/peps/pep-0483"><strong>PEP 483</strong></a>.</p>
86
 
<p>The function below takes and returns a string and is annotated as follows:</p>
87
 
<div class="highlight-python3"><div class="highlight"><pre><span class="k">def</span> <span class="nf">greeting</span><span class="p">(</span><span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
88
 
    <span class="k">return</span> <span class="s1">&#39;Hello &#39;</span> <span class="o">+</span> <span class="n">name</span>
89
 
</pre></div>
90
 
</div>
91
 
<p>In the function <code class="docutils literal"><span class="pre">greeting</span></code>, the argument <code class="docutils literal"><span class="pre">name</span></code> is expected to be of type
92
 
<a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal"><span class="pre">str</span></code></a> and the return type <a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal"><span class="pre">str</span></code></a>. Subtypes are accepted as
93
 
arguments.</p>
94
 
<div class="section" id="type-aliases">
95
 
<h2>26.1.1. Type aliases<a class="headerlink" href="#type-aliases" title="Permalink to this headline">¶</a></h2>
96
 
<p>A type alias is defined by assigning the type to the alias:</p>
97
 
<div class="highlight-python3"><div class="highlight"><pre><span class="n">Vector</span> <span class="o">=</span> <span class="n">List</span><span class="p">[</span><span class="nb">float</span><span class="p">]</span>
98
 
</pre></div>
99
 
</div>
100
 
</div>
101
 
<div class="section" id="callable">
102
 
<h2>26.1.2. Callable<a class="headerlink" href="#callable" title="Permalink to this headline">¶</a></h2>
103
 
<p>Frameworks expecting callback functions of specific signatures might be
104
 
type hinted using <code class="docutils literal"><span class="pre">Callable[[Arg1Type,</span> <span class="pre">Arg2Type],</span> <span class="pre">ReturnType]</span></code>.</p>
105
 
<p>For example:</p>
106
 
<div class="highlight-python3"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">typing</span> <span class="k">import</span> <span class="n">Callable</span>
107
 
 
108
 
<span class="k">def</span> <span class="nf">feeder</span><span class="p">(</span><span class="n">get_next_item</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[],</span> <span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
109
 
    <span class="c1"># Body</span>
110
 
 
111
 
<span class="k">def</span> <span class="nf">async_query</span><span class="p">(</span><span class="n">on_success</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[</span><span class="nb">int</span><span class="p">],</span> <span class="kc">None</span><span class="p">],</span>
112
 
                <span class="n">on_error</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[</span><span class="nb">int</span><span class="p">,</span> <span class="ne">Exception</span><span class="p">],</span> <span class="kc">None</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
113
 
    <span class="c1"># Body</span>
114
 
</pre></div>
115
 
</div>
116
 
<p>It is possible to declare the return type of a callable without specifying
117
 
the call signature by substituting a literal ellipsis
118
 
for the list of arguments in the type hint: <code class="docutils literal"><span class="pre">Callable[...,</span> <span class="pre">ReturnType]</span></code>.
119
 
<code class="docutils literal"><span class="pre">None</span></code> as a type hint is a special case and is replaced by <code class="docutils literal"><span class="pre">type(None)</span></code>.</p>
120
 
</div>
121
 
<div class="section" id="generics">
122
 
<h2>26.1.3. Generics<a class="headerlink" href="#generics" title="Permalink to this headline">¶</a></h2>
123
 
<p>Since type information about objects kept in containers cannot be statically
124
 
inferred in a generic way, abstract base classes have been extended to support
125
 
subscription to denote expected types for container elements.</p>
126
 
<div class="highlight-python3"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">typing</span> <span class="k">import</span> <span class="n">Mapping</span><span class="p">,</span> <span class="n">Sequence</span>
127
 
 
128
 
<span class="k">def</span> <span class="nf">notify_by_email</span><span class="p">(</span><span class="n">employees</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">Employee</span><span class="p">],</span>
129
 
                    <span class="n">overrides</span><span class="p">:</span> <span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span> <span class="o">...</span>
130
 
</pre></div>
131
 
</div>
132
 
<p>Generics can be parametrized by using a new factory available in typing
133
 
called <a class="reference internal" href="#typing.TypeVar" title="typing.TypeVar"><code class="xref py py-class docutils literal"><span class="pre">TypeVar</span></code></a>.</p>
134
 
<div class="highlight-python3"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">typing</span> <span class="k">import</span> <span class="n">Sequence</span><span class="p">,</span> <span class="n">TypeVar</span>
135
 
 
136
 
<span class="n">T</span> <span class="o">=</span> <span class="n">TypeVar</span><span class="p">(</span><span class="s1">&#39;T&#39;</span><span class="p">)</span>      <span class="c1"># Declare type variable</span>
137
 
 
138
 
<span class="k">def</span> <span class="nf">first</span><span class="p">(</span><span class="n">l</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">T</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>   <span class="c1"># Generic function</span>
139
 
    <span class="k">return</span> <span class="n">l</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
140
 
</pre></div>
141
 
</div>
142
 
</div>
143
 
<div class="section" id="user-defined-generic-types">
144
 
<h2>26.1.4. User-defined generic types<a class="headerlink" href="#user-defined-generic-types" title="Permalink to this headline">¶</a></h2>
145
 
<p>A user-defined class can be defined as a generic class.</p>
146
 
<div class="highlight-python3"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">typing</span> <span class="k">import</span> <span class="n">TypeVar</span><span class="p">,</span> <span class="n">Generic</span>
147
 
<span class="kn">from</span> <span class="nn">logging</span> <span class="k">import</span> <span class="n">Logger</span>
148
 
 
149
 
<span class="n">T</span> <span class="o">=</span> <span class="n">TypeVar</span><span class="p">(</span><span class="s1">&#39;T&#39;</span><span class="p">)</span>
150
 
 
151
 
<span class="k">class</span> <span class="nc">LoggedVar</span><span class="p">(</span><span class="n">Generic</span><span class="p">[</span><span class="n">T</span><span class="p">]):</span>
152
 
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">:</span> <span class="n">T</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">logger</span><span class="p">:</span> <span class="n">Logger</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
153
 
        <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
154
 
        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span> <span class="o">=</span> <span class="n">logger</span>
155
 
        <span class="bp">self</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">value</span>
156
 
 
157
 
    <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">new</span><span class="p">:</span> <span class="n">T</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
158
 
        <span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="s1">&#39;Set &#39;</span> <span class="o">+</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">value</span><span class="p">))</span>
159
 
        <span class="bp">self</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">new</span>
160
 
 
161
 
    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
162
 
        <span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="s1">&#39;Get &#39;</span> <span class="o">+</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">value</span><span class="p">))</span>
163
 
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">value</span>
164
 
 
165
 
    <span class="k">def</span> <span class="nf">log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
166
 
        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;{}: {}&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">message</span><span class="p">))</span>
167
 
</pre></div>
168
 
</div>
169
 
<p><code class="docutils literal"><span class="pre">Generic[T]</span></code> as a base class defines that the class <code class="docutils literal"><span class="pre">LoggedVar</span></code> takes a
170
 
single type parameter <code class="docutils literal"><span class="pre">T</span></code> . This also makes <code class="docutils literal"><span class="pre">T</span></code> valid as a type within the
171
 
class body.</p>
172
 
<p>The <a class="reference internal" href="#typing.Generic" title="typing.Generic"><code class="xref py py-class docutils literal"><span class="pre">Generic</span></code></a> base class uses a metaclass that defines
173
 
<a class="reference internal" href="../reference/datamodel.html#object.__getitem__" title="object.__getitem__"><code class="xref py py-meth docutils literal"><span class="pre">__getitem__()</span></code></a> so that <code class="docutils literal"><span class="pre">LoggedVar[t]</span></code> is valid as a type:</p>
174
 
<div class="highlight-python3"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">typing</span> <span class="k">import</span> <span class="n">Iterable</span>
175
 
 
176
 
<span class="k">def</span> <span class="nf">zero_all_vars</span><span class="p">(</span><span class="nb">vars</span><span class="p">:</span> <span class="n">Iterable</span><span class="p">[</span><span class="n">LoggedVar</span><span class="p">[</span><span class="nb">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
177
 
    <span class="k">for</span> <span class="n">var</span> <span class="ow">in</span> <span class="nb">vars</span><span class="p">:</span>
178
 
        <span class="n">var</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
179
 
</pre></div>
180
 
</div>
181
 
<p>A generic type can have any number of type variables, and type variables may
182
 
be constrained:</p>
183
 
<div class="highlight-python3"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">typing</span> <span class="k">import</span> <span class="n">TypeVar</span><span class="p">,</span> <span class="n">Generic</span>
184
 
<span class="o">...</span>
185
 
 
186
 
<span class="n">T</span> <span class="o">=</span> <span class="n">TypeVar</span><span class="p">(</span><span class="s1">&#39;T&#39;</span><span class="p">)</span>
187
 
<span class="n">S</span> <span class="o">=</span> <span class="n">TypeVar</span><span class="p">(</span><span class="s1">&#39;S&#39;</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span>
188
 
 
189
 
<span class="k">class</span> <span class="nc">StrangePair</span><span class="p">(</span><span class="n">Generic</span><span class="p">[</span><span class="n">T</span><span class="p">,</span> <span class="n">S</span><span class="p">]):</span>
190
 
    <span class="o">...</span>
191
 
</pre></div>
192
 
</div>
193
 
<p>Each type variable argument to <a class="reference internal" href="#typing.Generic" title="typing.Generic"><code class="xref py py-class docutils literal"><span class="pre">Generic</span></code></a> must be distinct.
194
 
This is thus invalid:</p>
195
 
<div class="highlight-python3"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">typing</span> <span class="k">import</span> <span class="n">TypeVar</span><span class="p">,</span> <span class="n">Generic</span>
196
 
<span class="o">...</span>
197
 
 
198
 
<span class="n">T</span> <span class="o">=</span> <span class="n">TypeVar</span><span class="p">(</span><span class="s1">&#39;T&#39;</span><span class="p">)</span>
199
 
 
200
 
<span class="k">class</span> <span class="nc">Pair</span><span class="p">(</span><span class="n">Generic</span><span class="p">[</span><span class="n">T</span><span class="p">,</span> <span class="n">T</span><span class="p">]):</span>   <span class="c1"># INVALID</span>
201
 
    <span class="o">...</span>
202
 
</pre></div>
203
 
</div>
204
 
<p>You can use multiple inheritance with <a class="reference internal" href="#typing.Generic" title="typing.Generic"><code class="xref py py-class docutils literal"><span class="pre">Generic</span></code></a>:</p>
205
 
<div class="highlight-python3"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">typing</span> <span class="k">import</span> <span class="n">TypeVar</span><span class="p">,</span> <span class="n">Generic</span><span class="p">,</span> <span class="n">Sized</span>
206
 
 
207
 
<span class="n">T</span> <span class="o">=</span> <span class="n">TypeVar</span><span class="p">(</span><span class="s1">&#39;T&#39;</span><span class="p">)</span>
208
 
 
209
 
<span class="k">class</span> <span class="nc">LinkedList</span><span class="p">(</span><span class="n">Sized</span><span class="p">,</span> <span class="n">Generic</span><span class="p">[</span><span class="n">T</span><span class="p">]):</span>
210
 
    <span class="o">...</span>
211
 
</pre></div>
212
 
</div>
213
 
<p>When inheriting from generic classes, some type variables could fixed:</p>
214
 
<div class="highlight-python3"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">typing</span> <span class="k">import</span> <span class="n">TypeVar</span><span class="p">,</span> <span class="n">Mapping</span>
215
 
 
216
 
<span class="n">T</span> <span class="o">=</span> <span class="n">TypeVar</span><span class="p">(</span><span class="s1">&#39;T&#39;</span><span class="p">)</span>
217
 
 
218
 
<span class="k">class</span> <span class="nc">MyDict</span><span class="p">(</span><span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">T</span><span class="p">]):</span>
219
 
    <span class="o">...</span>
220
 
</pre></div>
221
 
</div>
222
 
<p>In this case <code class="docutils literal"><span class="pre">MyDict</span></code> has a single parameter, <code class="docutils literal"><span class="pre">T</span></code>.</p>
223
 
<p>Subclassing a generic class without specifying type parameters assumes
224
 
<a class="reference internal" href="#typing.Any" title="typing.Any"><code class="xref py py-class docutils literal"><span class="pre">Any</span></code></a> for each position. In the following example, <code class="docutils literal"><span class="pre">MyIterable</span></code> is
225
 
not generic but implicitly inherits from <code class="docutils literal"><span class="pre">Iterable[Any]</span></code>:</p>
226
 
<div class="highlight-python3"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">typing</span> <span class="k">import</span> <span class="n">Iterable</span>
227
 
 
228
 
<span class="k">class</span> <span class="nc">MyIterable</span><span class="p">(</span><span class="n">Iterable</span><span class="p">):</span> <span class="c1"># Same as Iterable[Any]</span>
229
 
</pre></div>
230
 
</div>
231
 
<p>The metaclass used by <a class="reference internal" href="#typing.Generic" title="typing.Generic"><code class="xref py py-class docutils literal"><span class="pre">Generic</span></code></a> is a subclass of <a class="reference internal" href="abc.html#abc.ABCMeta" title="abc.ABCMeta"><code class="xref py py-class docutils literal"><span class="pre">abc.ABCMeta</span></code></a>.
232
 
A generic class can be an ABC by including abstract methods or properties,
233
 
and generic classes can also have ABCs as base classes without a metaclass
234
 
conflict.  Generic metaclasses are not supported.</p>
235
 
</div>
236
 
<div class="section" id="the-any-type">
237
 
<h2>26.1.5. The <a class="reference internal" href="#typing.Any" title="typing.Any"><code class="xref py py-class docutils literal"><span class="pre">Any</span></code></a> type<a class="headerlink" href="#the-any-type" title="Permalink to this headline">¶</a></h2>
238
 
<p>A special kind of type is <a class="reference internal" href="#typing.Any" title="typing.Any"><code class="xref py py-class docutils literal"><span class="pre">Any</span></code></a>. Every type is a subtype of
239
 
<a class="reference internal" href="#typing.Any" title="typing.Any"><code class="xref py py-class docutils literal"><span class="pre">Any</span></code></a>. This is also true for the builtin type object. However, to the
240
 
static type checker these are completely different.</p>
241
 
<p>When the type of a value is <a class="reference internal" href="functions.html#object" title="object"><code class="xref py py-class docutils literal"><span class="pre">object</span></code></a>, the type checker will reject
242
 
almost all operations on it, and assigning it to a variable (or using it as a
243
 
return value) of a more specialized type is a type error. On the other hand,
244
 
when a value has type <a class="reference internal" href="#typing.Any" title="typing.Any"><code class="xref py py-class docutils literal"><span class="pre">Any</span></code></a>, the type checker will allow all operations
245
 
on it, and a value of type <a class="reference internal" href="#typing.Any" title="typing.Any"><code class="xref py py-class docutils literal"><span class="pre">Any</span></code></a> can be assigned to a variable (or used
246
 
as a return value) of a more constrained type.</p>
247
 
</div>
248
 
<div class="section" id="classes-functions-and-decorators">
249
 
<h2>26.1.6. Classes, functions, and decorators<a class="headerlink" href="#classes-functions-and-decorators" title="Permalink to this headline">¶</a></h2>
250
 
<p>The module defines the following classes, functions and decorators:</p>
251
 
<dl class="class">
252
 
<dt id="typing.Any">
253
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">Any</code><a class="headerlink" href="#typing.Any" title="Permalink to this definition">¶</a></dt>
254
 
<dd><p>Special type indicating an unconstrained type.</p>
255
 
<ul class="simple">
256
 
<li>Any object is an instance of <a class="reference internal" href="#typing.Any" title="typing.Any"><code class="xref py py-class docutils literal"><span class="pre">Any</span></code></a>.</li>
257
 
<li>Any class is a subclass of <a class="reference internal" href="#typing.Any" title="typing.Any"><code class="xref py py-class docutils literal"><span class="pre">Any</span></code></a>.</li>
258
 
<li>As a special case, <a class="reference internal" href="#typing.Any" title="typing.Any"><code class="xref py py-class docutils literal"><span class="pre">Any</span></code></a> and <a class="reference internal" href="functions.html#object" title="object"><code class="xref py py-class docutils literal"><span class="pre">object</span></code></a> are subclasses of
259
 
each other.</li>
260
 
</ul>
261
 
</dd></dl>
262
 
 
263
 
<dl class="class">
264
 
<dt id="typing.TypeVar">
265
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">TypeVar</code><a class="headerlink" href="#typing.TypeVar" title="Permalink to this definition">¶</a></dt>
266
 
<dd><p>Type variable.</p>
267
 
<p>Usage:</p>
268
 
<div class="highlight-python3"><div class="highlight"><pre><span class="n">T</span> <span class="o">=</span> <span class="n">TypeVar</span><span class="p">(</span><span class="s1">&#39;T&#39;</span><span class="p">)</span>  <span class="c1"># Can be anything</span>
269
 
<span class="n">A</span> <span class="o">=</span> <span class="n">TypeVar</span><span class="p">(</span><span class="s1">&#39;A&#39;</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">)</span>  <span class="c1"># Must be str or bytes</span>
270
 
</pre></div>
271
 
</div>
272
 
<p>Type variables exist primarily for the benefit of static type
273
 
checkers.  They serve as the parameters for generic types as well
274
 
as for generic function definitions.  See class Generic for more
275
 
information on generic types.  Generic functions work as follows:</p>
276
 
<div class="highlight-python3"><div class="highlight"><pre><span class="k">def</span> <span class="nf">repeat</span><span class="p">(</span><span class="n">x</span><span class="p">:</span> <span class="n">T</span><span class="p">,</span> <span class="n">n</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">T</span><span class="p">]:</span>
277
 
    <span class="sd">&quot;&quot;&quot;Return a list containing n references to x.&quot;&quot;&quot;</span>
278
 
    <span class="k">return</span> <span class="p">[</span><span class="n">x</span><span class="p">]</span><span class="o">*</span><span class="n">n</span>
279
 
 
280
 
<span class="k">def</span> <span class="nf">longest</span><span class="p">(</span><span class="n">x</span><span class="p">:</span> <span class="n">A</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">A</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">A</span><span class="p">:</span>
281
 
    <span class="sd">&quot;&quot;&quot;Return the longest of two strings.&quot;&quot;&quot;</span>
282
 
    <span class="k">return</span> <span class="n">x</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="nb">len</span><span class="p">(</span><span class="n">y</span><span class="p">)</span> <span class="k">else</span> <span class="n">y</span>
283
 
</pre></div>
284
 
</div>
285
 
<p>The latter example&#8217;s signature is essentially the overloading
286
 
of <code class="docutils literal"><span class="pre">(str,</span> <span class="pre">str)</span> <span class="pre">-&gt;</span> <span class="pre">str</span></code> and <code class="docutils literal"><span class="pre">(bytes,</span> <span class="pre">bytes)</span> <span class="pre">-&gt;</span> <span class="pre">bytes</span></code>.  Also note
287
 
that if the arguments are instances of some subclass of <a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal"><span class="pre">str</span></code></a>,
288
 
the return type is still plain <a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal"><span class="pre">str</span></code></a>.</p>
289
 
<p>At runtime, <code class="docutils literal"><span class="pre">isinstance(x,</span> <span class="pre">T)</span></code> will raise <a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a>.  In general,
290
 
<a class="reference internal" href="functions.html#isinstance" title="isinstance"><code class="xref py py-func docutils literal"><span class="pre">isinstance()</span></code></a> and <a class="reference internal" href="functions.html#issubclass" title="issubclass"><code class="xref py py-func docutils literal"><span class="pre">issubclass()</span></code></a> should not be used with types.</p>
291
 
<p>Type variables may be marked covariant or contravariant by passing
292
 
<code class="docutils literal"><span class="pre">covariant=True</span></code> or <code class="docutils literal"><span class="pre">contravariant=True</span></code>.  See <span class="target" id="index-3"></span><a class="pep reference external" href="https://www.python.org/dev/peps/pep-0484"><strong>PEP 484</strong></a> for more
293
 
details.  By default type variables are invariant.  Alternatively,
294
 
a type variable may specify an upper bound using <code class="docutils literal"><span class="pre">bound=&lt;type&gt;</span></code>.
295
 
This means that an actual type substituted (explicitly or implicitly)
296
 
for the type variable must be a subclass of the boundary type,
297
 
see <span class="target" id="index-4"></span><a class="pep reference external" href="https://www.python.org/dev/peps/pep-0484"><strong>PEP 484</strong></a>.</p>
298
 
</dd></dl>
299
 
 
300
 
<dl class="class">
301
 
<dt id="typing.Union">
302
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">Union</code><a class="headerlink" href="#typing.Union" title="Permalink to this definition">¶</a></dt>
303
 
<dd><p>Union type; <code class="docutils literal"><span class="pre">Union[X,</span> <span class="pre">Y]</span></code> means either X or Y.</p>
304
 
<p>To define a union, use e.g. <code class="docutils literal"><span class="pre">Union[int,</span> <span class="pre">str]</span></code>.  Details:</p>
305
 
<ul>
306
 
<li><p class="first">The arguments must be types and there must be at least one.</p>
307
 
</li>
308
 
<li><p class="first">Unions of unions are flattened, e.g.:</p>
309
 
<div class="highlight-python3"><div class="highlight"><pre><span class="n">Union</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="nb">float</span><span class="p">]</span> <span class="o">==</span> <span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="nb">float</span><span class="p">]</span>
310
 
</pre></div>
311
 
</div>
312
 
</li>
313
 
<li><p class="first">Unions of a single argument vanish, e.g.:</p>
314
 
<div class="highlight-python3"><div class="highlight"><pre><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">==</span> <span class="nb">int</span>  <span class="c1"># The constructor actually returns int</span>
315
 
</pre></div>
316
 
</div>
317
 
</li>
318
 
<li><p class="first">Redundant arguments are skipped, e.g.:</p>
319
 
<div class="highlight-python3"><div class="highlight"><pre><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">]</span> <span class="o">==</span> <span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span>
320
 
</pre></div>
321
 
</div>
322
 
</li>
323
 
<li><p class="first">When comparing unions, the argument order is ignored, e.g.:</p>
324
 
<div class="highlight-python3"><div class="highlight"><pre><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">==</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">]</span>
325
 
</pre></div>
326
 
</div>
327
 
</li>
328
 
<li><p class="first">If <a class="reference internal" href="#typing.Any" title="typing.Any"><code class="xref py py-class docutils literal"><span class="pre">Any</span></code></a> is present it is the sole survivor, e.g.:</p>
329
 
<div class="highlight-python3"><div class="highlight"><pre><span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">==</span> <span class="n">Any</span>
330
 
</pre></div>
331
 
</div>
332
 
</li>
333
 
<li><p class="first">You cannot subclass or instantiate a union.</p>
334
 
</li>
335
 
<li><p class="first">You cannot write <code class="docutils literal"><span class="pre">Union[X][Y]</span></code>.</p>
336
 
</li>
337
 
<li><p class="first">You can use <code class="docutils literal"><span class="pre">Optional[X]</span></code> as a shorthand for <code class="docutils literal"><span class="pre">Union[X,</span> <span class="pre">None]</span></code>.</p>
338
 
</li>
339
 
</ul>
340
 
</dd></dl>
341
 
 
342
 
<dl class="class">
343
 
<dt id="typing.Optional">
344
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">Optional</code><a class="headerlink" href="#typing.Optional" title="Permalink to this definition">¶</a></dt>
345
 
<dd><p>Optional type.</p>
346
 
<p><code class="docutils literal"><span class="pre">Optional[X]</span></code> is equivalent to <code class="docutils literal"><span class="pre">Union[X,</span> <span class="pre">type(None)]</span></code>.</p>
347
 
<p>Note that this is not the same concept as an optional argument,
348
 
which is one that has a default.  An optional argument with a
349
 
default needn&#8217;t use the <code class="docutils literal"><span class="pre">Optional</span></code> qualifier on its type
350
 
annotation (although it is inferred if the default is <code class="docutils literal"><span class="pre">None</span></code>).
351
 
A mandatory argument may still have an <code class="docutils literal"><span class="pre">Optional</span></code> type if an
352
 
explicit value of <code class="docutils literal"><span class="pre">None</span></code> is allowed.</p>
353
 
</dd></dl>
354
 
 
355
 
<dl class="class">
356
 
<dt id="typing.Tuple">
357
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">Tuple</code><a class="headerlink" href="#typing.Tuple" title="Permalink to this definition">¶</a></dt>
358
 
<dd><p>Tuple type; <code class="docutils literal"><span class="pre">Tuple[X,</span> <span class="pre">Y]</span></code> is the is the type of a tuple of two items
359
 
with the first item of type X and the second of type Y.</p>
360
 
<p>Example: <code class="docutils literal"><span class="pre">Tuple[T1,</span> <span class="pre">T2]</span></code> is a tuple of two elements corresponding
361
 
to type variables T1 and T2.  <code class="docutils literal"><span class="pre">Tuple[int,</span> <span class="pre">float,</span> <span class="pre">str]</span></code> is a tuple
362
 
of an int, a float and a string.</p>
363
 
<p>To specify a variable-length tuple of homogeneous type,
364
 
use literal ellipsis, e.g. <code class="docutils literal"><span class="pre">Tuple[int,</span> <span class="pre">...]</span></code>.</p>
365
 
</dd></dl>
366
 
 
367
 
<dl class="class">
368
 
<dt id="typing.Callable">
369
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">Callable</code><a class="headerlink" href="#typing.Callable" title="Permalink to this definition">¶</a></dt>
370
 
<dd><p>Callable type; <code class="docutils literal"><span class="pre">Callable[[int],</span> <span class="pre">str]</span></code> is a function of (int) -&gt; str.</p>
371
 
<p>The subscription syntax must always be used with exactly two
372
 
values: the argument list and the return type.  The argument list
373
 
must be a list of types; the return type must be a single type.</p>
374
 
<p>There is no syntax to indicate optional or keyword arguments,
375
 
such function types are rarely used as callback types.
376
 
<code class="docutils literal"><span class="pre">Callable[...,</span> <span class="pre">ReturnType]</span></code> could be used to type hint a callable
377
 
taking any number of arguments and returning <code class="docutils literal"><span class="pre">ReturnType</span></code>.
378
 
A plain <a class="reference internal" href="#typing.Callable" title="typing.Callable"><code class="xref py py-class docutils literal"><span class="pre">Callable</span></code></a> is equivalent to <code class="docutils literal"><span class="pre">Callable[...,</span> <span class="pre">Any]</span></code>.</p>
379
 
</dd></dl>
380
 
 
381
 
<dl class="class">
382
 
<dt id="typing.Generic">
383
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">Generic</code><a class="headerlink" href="#typing.Generic" title="Permalink to this definition">¶</a></dt>
384
 
<dd><p>Abstract base class for generic types.</p>
385
 
<p>A generic type is typically declared by inheriting from an
386
 
instantiation of this class with one or more type variables.
387
 
For example, a generic mapping type might be defined as:</p>
388
 
<div class="highlight-python3"><div class="highlight"><pre><span class="k">class</span> <span class="nc">Mapping</span><span class="p">(</span><span class="n">Generic</span><span class="p">[</span><span class="n">KT</span><span class="p">,</span> <span class="n">VT</span><span class="p">]):</span>
389
 
    <span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="n">KT</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">VT</span><span class="p">:</span>
390
 
        <span class="o">...</span>
391
 
        <span class="c1"># Etc.</span>
392
 
</pre></div>
393
 
</div>
394
 
<p>This class can then be used as follows:</p>
395
 
<div class="highlight-python3"><div class="highlight"><pre><span class="n">X</span> <span class="o">=</span> <span class="n">TypeVar</span><span class="p">(</span><span class="s1">&#39;X&#39;</span><span class="p">)</span>
396
 
<span class="n">Y</span> <span class="o">=</span> <span class="n">TypeVar</span><span class="p">(</span><span class="s1">&#39;Y&#39;</span><span class="p">)</span>
397
 
 
398
 
<span class="k">def</span> <span class="nf">lookup_name</span><span class="p">(</span><span class="n">mapping</span><span class="p">:</span> <span class="n">Mapping</span><span class="p">[</span><span class="n">X</span><span class="p">,</span> <span class="n">Y</span><span class="p">],</span> <span class="n">key</span><span class="p">:</span> <span class="n">X</span><span class="p">,</span> <span class="n">default</span><span class="p">:</span> <span class="n">Y</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Y</span><span class="p">:</span>
399
 
    <span class="k">try</span><span class="p">:</span>
400
 
        <span class="k">return</span> <span class="n">mapping</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
401
 
    <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
402
 
        <span class="k">return</span> <span class="n">default</span>
403
 
</pre></div>
404
 
</div>
405
 
</dd></dl>
406
 
 
407
 
<dl class="class">
408
 
<dt id="typing.Iterable">
409
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">Iterable</code><span class="sig-paren">(</span><em>Generic[T_co]</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.Iterable" title="Permalink to this definition">¶</a></dt>
410
 
<dd><p>A generic version of the <a class="reference internal" href="collections.abc.html#collections.abc.Iterable" title="collections.abc.Iterable"><code class="xref py py-class docutils literal"><span class="pre">collections.abc.Iterable</span></code></a>.</p>
411
 
</dd></dl>
412
 
 
413
 
<dl class="class">
414
 
<dt id="typing.Iterator">
415
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">Iterator</code><span class="sig-paren">(</span><em>Iterable[T_co]</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.Iterator" title="Permalink to this definition">¶</a></dt>
416
 
<dd><p>A generic version of the <a class="reference internal" href="collections.abc.html#collections.abc.Iterator" title="collections.abc.Iterator"><code class="xref py py-class docutils literal"><span class="pre">collections.abc.Iterator</span></code></a>.</p>
417
 
</dd></dl>
418
 
 
419
 
<dl class="class">
420
 
<dt id="typing.SupportsInt">
421
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">SupportsInt</code><a class="headerlink" href="#typing.SupportsInt" title="Permalink to this definition">¶</a></dt>
422
 
<dd><p>An ABC with one abstract method <code class="docutils literal"><span class="pre">__int__</span></code>.</p>
423
 
</dd></dl>
424
 
 
425
 
<dl class="class">
426
 
<dt id="typing.SupportsFloat">
427
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">SupportsFloat</code><a class="headerlink" href="#typing.SupportsFloat" title="Permalink to this definition">¶</a></dt>
428
 
<dd><p>An ABC with one abstract method <code class="docutils literal"><span class="pre">__float__</span></code>.</p>
429
 
</dd></dl>
430
 
 
431
 
<dl class="class">
432
 
<dt id="typing.SupportsAbs">
433
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">SupportsAbs</code><a class="headerlink" href="#typing.SupportsAbs" title="Permalink to this definition">¶</a></dt>
434
 
<dd><p>An ABC with one abstract method <code class="docutils literal"><span class="pre">__abs__</span></code> that is covariant
435
 
in its return type.</p>
436
 
</dd></dl>
437
 
 
438
 
<dl class="class">
439
 
<dt id="typing.SupportsRound">
440
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">SupportsRound</code><a class="headerlink" href="#typing.SupportsRound" title="Permalink to this definition">¶</a></dt>
441
 
<dd><p>An ABC with one abstract method <code class="docutils literal"><span class="pre">__round__</span></code>
442
 
that is covariant in its return type.</p>
443
 
</dd></dl>
444
 
 
445
 
<dl class="class">
446
 
<dt id="typing.Reversible">
447
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">Reversible</code><a class="headerlink" href="#typing.Reversible" title="Permalink to this definition">¶</a></dt>
448
 
<dd><p>An ABC with one abstract method <code class="docutils literal"><span class="pre">__reversed__</span></code> returning
449
 
an <code class="docutils literal"><span class="pre">Iterator[T_co]</span></code>.</p>
450
 
</dd></dl>
451
 
 
452
 
<dl class="class">
453
 
<dt id="typing.Container">
454
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">Container</code><span class="sig-paren">(</span><em>Generic[T_co]</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.Container" title="Permalink to this definition">¶</a></dt>
455
 
<dd><p>A generic version of <a class="reference internal" href="collections.abc.html#collections.abc.Container" title="collections.abc.Container"><code class="xref py py-class docutils literal"><span class="pre">collections.abc.Container</span></code></a>.</p>
456
 
</dd></dl>
457
 
 
458
 
<dl class="class">
459
 
<dt id="typing.AbstractSet">
460
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">AbstractSet</code><span class="sig-paren">(</span><em>Sized, Iterable[T_co], Container[T_co]</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.AbstractSet" title="Permalink to this definition">¶</a></dt>
461
 
<dd><p>A generic version of <a class="reference internal" href="collections.abc.html#collections.abc.Set" title="collections.abc.Set"><code class="xref py py-class docutils literal"><span class="pre">collections.abc.Set</span></code></a>.</p>
462
 
</dd></dl>
463
 
 
464
 
<dl class="class">
465
 
<dt id="typing.MutableSet">
466
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">MutableSet</code><span class="sig-paren">(</span><em>AbstractSet[T]</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.MutableSet" title="Permalink to this definition">¶</a></dt>
467
 
<dd><p>A generic version of <a class="reference internal" href="collections.abc.html#collections.abc.MutableSet" title="collections.abc.MutableSet"><code class="xref py py-class docutils literal"><span class="pre">collections.abc.MutableSet</span></code></a>.</p>
468
 
</dd></dl>
469
 
 
470
 
<dl class="class">
471
 
<dt id="typing.Mapping">
472
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">Mapping</code><span class="sig-paren">(</span><em>Sized, Iterable[KT], Container[KT], Generic[VT_co]</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.Mapping" title="Permalink to this definition">¶</a></dt>
473
 
<dd><p>A generic version of <a class="reference internal" href="collections.abc.html#collections.abc.Mapping" title="collections.abc.Mapping"><code class="xref py py-class docutils literal"><span class="pre">collections.abc.Mapping</span></code></a>.</p>
474
 
</dd></dl>
475
 
 
476
 
<dl class="class">
477
 
<dt id="typing.MutableMapping">
478
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">MutableMapping</code><span class="sig-paren">(</span><em>Mapping[KT, VT]</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.MutableMapping" title="Permalink to this definition">¶</a></dt>
479
 
<dd><p>A generic version of <a class="reference internal" href="collections.abc.html#collections.abc.MutableMapping" title="collections.abc.MutableMapping"><code class="xref py py-class docutils literal"><span class="pre">collections.abc.MutableMapping</span></code></a>.</p>
480
 
</dd></dl>
481
 
 
482
 
<dl class="class">
483
 
<dt id="typing.Sequence">
484
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">Sequence</code><span class="sig-paren">(</span><em>Sized, Iterable[T_co], Container[T_co]</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.Sequence" title="Permalink to this definition">¶</a></dt>
485
 
<dd><p>A generic version of <a class="reference internal" href="collections.abc.html#collections.abc.Sequence" title="collections.abc.Sequence"><code class="xref py py-class docutils literal"><span class="pre">collections.abc.Sequence</span></code></a>.</p>
486
 
</dd></dl>
487
 
 
488
 
<dl class="class">
489
 
<dt id="typing.MutableSequence">
490
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">MutableSequence</code><span class="sig-paren">(</span><em>Sequence[T]</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.MutableSequence" title="Permalink to this definition">¶</a></dt>
491
 
<dd><p>A generic version of <a class="reference internal" href="collections.abc.html#collections.abc.MutableSequence" title="collections.abc.MutableSequence"><code class="xref py py-class docutils literal"><span class="pre">collections.abc.MutableSequence</span></code></a>.</p>
492
 
</dd></dl>
493
 
 
494
 
<dl class="class">
495
 
<dt id="typing.ByteString">
496
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">ByteString</code><span class="sig-paren">(</span><em>Sequence[int]</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.ByteString" title="Permalink to this definition">¶</a></dt>
497
 
<dd><p>A generic version of <code class="xref py py-class docutils literal"><span class="pre">collections.abc.ByteString</span></code>.</p>
498
 
<p>This type represents the types <a class="reference internal" href="functions.html#bytes" title="bytes"><code class="xref py py-class docutils literal"><span class="pre">bytes</span></code></a>, <a class="reference internal" href="functions.html#bytearray" title="bytearray"><code class="xref py py-class docutils literal"><span class="pre">bytearray</span></code></a>,
499
 
and <a class="reference internal" href="stdtypes.html#memoryview" title="memoryview"><code class="xref py py-class docutils literal"><span class="pre">memoryview</span></code></a>.</p>
500
 
<p>As a shorthand for this type, <a class="reference internal" href="functions.html#bytes" title="bytes"><code class="xref py py-class docutils literal"><span class="pre">bytes</span></code></a> can be used to
501
 
annotate arguments of any of the types mentioned above.</p>
502
 
</dd></dl>
503
 
 
504
 
<dl class="class">
505
 
<dt id="typing.List">
506
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">List</code><span class="sig-paren">(</span><em>list, MutableSequence[T]</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.List" title="Permalink to this definition">¶</a></dt>
507
 
<dd><p>Generic version of <a class="reference internal" href="stdtypes.html#list" title="list"><code class="xref py py-class docutils literal"><span class="pre">list</span></code></a>.
508
 
Useful for annotating return types. To annotate arguments it is preferred
509
 
to use abstract collection types such as <a class="reference internal" href="#typing.Mapping" title="typing.Mapping"><code class="xref py py-class docutils literal"><span class="pre">Mapping</span></code></a>, <a class="reference internal" href="#typing.Sequence" title="typing.Sequence"><code class="xref py py-class docutils literal"><span class="pre">Sequence</span></code></a>,
510
 
or <a class="reference internal" href="#typing.AbstractSet" title="typing.AbstractSet"><code class="xref py py-class docutils literal"><span class="pre">AbstractSet</span></code></a>.</p>
511
 
<p>This type may be used as follows:</p>
512
 
<div class="highlight-python3"><div class="highlight"><pre><span class="n">T</span> <span class="o">=</span> <span class="n">TypeVar</span><span class="p">(</span><span class="s1">&#39;T&#39;</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">)</span>
513
 
 
514
 
<span class="k">def</span> <span class="nf">vec2</span><span class="p">(</span><span class="n">x</span><span class="p">:</span> <span class="n">T</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">T</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">T</span><span class="p">]:</span>
515
 
    <span class="k">return</span> <span class="p">[</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">]</span>
516
 
 
517
 
<span class="k">def</span> <span class="nf">slice__to_4</span><span class="p">(</span><span class="n">vector</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">T</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">T</span><span class="p">]:</span>
518
 
    <span class="k">return</span> <span class="n">vector</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">4</span><span class="p">]</span>
519
 
</pre></div>
520
 
</div>
521
 
</dd></dl>
522
 
 
523
 
<dl class="class">
524
 
<dt>
525
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">AbstractSet</code><span class="sig-paren">(</span><em>set, MutableSet[T]</em><span class="sig-paren">)</span></dt>
526
 
<dd><p>A generic version of <a class="reference internal" href="collections.abc.html#collections.abc.Set" title="collections.abc.Set"><code class="xref py py-class docutils literal"><span class="pre">collections.abc.Set</span></code></a>.</p>
527
 
</dd></dl>
528
 
 
529
 
<dl class="class">
530
 
<dt id="typing.MappingView">
531
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">MappingView</code><span class="sig-paren">(</span><em>Sized, Iterable[T_co]</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.MappingView" title="Permalink to this definition">¶</a></dt>
532
 
<dd><p>A generic version of <a class="reference internal" href="collections.abc.html#collections.abc.MappingView" title="collections.abc.MappingView"><code class="xref py py-class docutils literal"><span class="pre">collections.abc.MappingView</span></code></a>.</p>
533
 
</dd></dl>
534
 
 
535
 
<dl class="class">
536
 
<dt id="typing.KeysView">
537
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">KeysView</code><span class="sig-paren">(</span><em>MappingView[KT_co], AbstractSet[KT_co]</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.KeysView" title="Permalink to this definition">¶</a></dt>
538
 
<dd><p>A generic version of <a class="reference internal" href="collections.abc.html#collections.abc.KeysView" title="collections.abc.KeysView"><code class="xref py py-class docutils literal"><span class="pre">collections.abc.KeysView</span></code></a>.</p>
539
 
</dd></dl>
540
 
 
541
 
<dl class="class">
542
 
<dt id="typing.ItemsView">
543
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">ItemsView</code><span class="sig-paren">(</span><em>MappingView, Generic[KT_co, VT_co]</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.ItemsView" title="Permalink to this definition">¶</a></dt>
544
 
<dd><p>A generic version of <a class="reference internal" href="collections.abc.html#collections.abc.ItemsView" title="collections.abc.ItemsView"><code class="xref py py-class docutils literal"><span class="pre">collections.abc.ItemsView</span></code></a>.</p>
545
 
</dd></dl>
546
 
 
547
 
<dl class="class">
548
 
<dt id="typing.ValuesView">
549
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">ValuesView</code><span class="sig-paren">(</span><em>MappingView[VT_co]</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.ValuesView" title="Permalink to this definition">¶</a></dt>
550
 
<dd><p>A generic version of <a class="reference internal" href="collections.abc.html#collections.abc.ValuesView" title="collections.abc.ValuesView"><code class="xref py py-class docutils literal"><span class="pre">collections.abc.ValuesView</span></code></a>.</p>
551
 
</dd></dl>
552
 
 
553
 
<dl class="class">
554
 
<dt id="typing.Dict">
555
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">Dict</code><span class="sig-paren">(</span><em>dict, MutableMapping[KT, VT]</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.Dict" title="Permalink to this definition">¶</a></dt>
556
 
<dd><p>A generic version of <a class="reference internal" href="stdtypes.html#dict" title="dict"><code class="xref py py-class docutils literal"><span class="pre">dict</span></code></a>.
557
 
The usage of this type is as follows:</p>
558
 
<div class="highlight-python3"><div class="highlight"><pre><span class="k">def</span> <span class="nf">get_position_in_index</span><span class="p">(</span><span class="n">word_list</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">],</span> <span class="n">word</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
559
 
    <span class="k">return</span> <span class="n">word_list</span><span class="p">[</span><span class="n">word</span><span class="p">]</span>
560
 
</pre></div>
561
 
</div>
562
 
</dd></dl>
563
 
 
564
 
<dl class="class">
565
 
<dt id="typing.Generator">
566
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">Generator</code><span class="sig-paren">(</span><em>Iterator[T_co], Generic[T_co, T_contra, V_co]</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.Generator" title="Permalink to this definition">¶</a></dt>
567
 
<dd></dd></dl>
568
 
 
569
 
<dl class="class">
570
 
<dt id="typing.io">
571
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">io</code><a class="headerlink" href="#typing.io" title="Permalink to this definition">¶</a></dt>
572
 
<dd><p>Wrapper namespace for I/O stream types.</p>
573
 
<p>This defines the generic type <code class="docutils literal"><span class="pre">IO[AnyStr]</span></code> and aliases <code class="docutils literal"><span class="pre">TextIO</span></code>
574
 
and <code class="docutils literal"><span class="pre">BinaryIO</span></code> for respectively <code class="docutils literal"><span class="pre">IO[str]</span></code> and <code class="docutils literal"><span class="pre">IO[bytes]</span></code>.
575
 
These representing the types of I/O streams such as returned by
576
 
<a class="reference internal" href="functions.html#open" title="open"><code class="xref py py-func docutils literal"><span class="pre">open()</span></code></a>.</p>
577
 
</dd></dl>
578
 
 
579
 
<dl class="class">
580
 
<dt id="typing.re">
581
 
<em class="property">class </em><code class="descclassname">typing.</code><code class="descname">re</code><a class="headerlink" href="#typing.re" title="Permalink to this definition">¶</a></dt>
582
 
<dd><p>Wrapper namespace for regular expression matching types.</p>
583
 
<p>This defines the type aliases <code class="docutils literal"><span class="pre">Pattern</span></code> and <code class="docutils literal"><span class="pre">Match</span></code> which
584
 
correspond to the return types from <a class="reference internal" href="re.html#re.compile" title="re.compile"><code class="xref py py-func docutils literal"><span class="pre">re.compile()</span></code></a> and
585
 
<a class="reference internal" href="re.html#re.match" title="re.match"><code class="xref py py-func docutils literal"><span class="pre">re.match()</span></code></a>.  These types (and the corresponding functions)
586
 
are generic in <code class="docutils literal"><span class="pre">AnyStr</span></code> and can be made specific by writing
587
 
<code class="docutils literal"><span class="pre">Pattern[str]</span></code>, <code class="docutils literal"><span class="pre">Pattern[bytes]</span></code>, <code class="docutils literal"><span class="pre">Match[str]</span></code>, or
588
 
<code class="docutils literal"><span class="pre">Match[bytes]</span></code>.</p>
589
 
</dd></dl>
590
 
 
591
 
<dl class="function">
592
 
<dt id="typing.NamedTuple">
593
 
<code class="descclassname">typing.</code><code class="descname">NamedTuple</code><span class="sig-paren">(</span><em>typename</em>, <em>fields</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.NamedTuple" title="Permalink to this definition">¶</a></dt>
594
 
<dd><p>Typed version of namedtuple.</p>
595
 
<p>Usage:</p>
596
 
<div class="highlight-python3"><div class="highlight"><pre><span class="n">Employee</span> <span class="o">=</span> <span class="n">typing</span><span class="o">.</span><span class="n">NamedTuple</span><span class="p">(</span><span class="s1">&#39;Employee&#39;</span><span class="p">,</span> <span class="p">[(</span><span class="s1">&#39;name&#39;</span><span class="p">,</span> <span class="nb">str</span><span class="p">),</span> <span class="p">(</span><span class="s1">&#39;id&#39;</span><span class="p">,</span> <span class="nb">int</span><span class="p">)])</span>
597
 
</pre></div>
598
 
</div>
599
 
<p>This is equivalent to:</p>
600
 
<div class="highlight-python3"><div class="highlight"><pre><span class="n">Employee</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">namedtuple</span><span class="p">(</span><span class="s1">&#39;Employee&#39;</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">,</span> <span class="s1">&#39;id&#39;</span><span class="p">])</span>
601
 
</pre></div>
602
 
</div>
603
 
<p>The resulting class has one extra attribute: _field_types,
604
 
giving a dict mapping field names to types.  (The field names
605
 
are in the _fields attribute, which is part of the namedtuple
606
 
API.)</p>
607
 
</dd></dl>
608
 
 
609
 
<dl class="function">
610
 
<dt id="typing.cast">
611
 
<code class="descclassname">typing.</code><code class="descname">cast</code><span class="sig-paren">(</span><em>typ</em>, <em>val</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.cast" title="Permalink to this definition">¶</a></dt>
612
 
<dd><p>Cast a value to a type.</p>
613
 
<p>This returns the value unchanged.  To the type checker this
614
 
signals that the return value has the designated type, but at
615
 
runtime we intentionally don&#8217;t check anything (we want this
616
 
to be as fast as possible).</p>
617
 
</dd></dl>
618
 
 
619
 
<dl class="function">
620
 
<dt id="typing.get_type_hints">
621
 
<code class="descclassname">typing.</code><code class="descname">get_type_hints</code><span class="sig-paren">(</span><em>obj</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.get_type_hints" title="Permalink to this definition">¶</a></dt>
622
 
<dd><p>Return type hints for a function or method object.</p>
623
 
<p>This is often the same as <code class="docutils literal"><span class="pre">obj.__annotations__</span></code>, but it handles
624
 
forward references encoded as string literals, and if necessary
625
 
adds <code class="docutils literal"><span class="pre">Optional[t]</span></code> if a default value equal to None is set.</p>
626
 
</dd></dl>
627
 
 
628
 
<dl class="function">
629
 
<dt id="typing.no_type_check">
630
 
<code class="descclassname">&#64;</code><code class="descclassname">typing.</code><code class="descname">no_type_check</code><span class="sig-paren">(</span><em>arg</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.no_type_check" title="Permalink to this definition">¶</a></dt>
631
 
<dd><p>Decorator to indicate that annotations are not type hints.</p>
632
 
<p>The argument must be a class or function; if it is a class, it
633
 
applies recursively to all methods defined in that class (but not
634
 
to methods defined in its superclasses or subclasses).</p>
635
 
<p>This mutates the function(s) in place.</p>
636
 
</dd></dl>
637
 
 
638
 
<dl class="function">
639
 
<dt id="typing.no_type_check_decorator">
640
 
<code class="descclassname">&#64;</code><code class="descclassname">typing.</code><code class="descname">no_type_check_decorator</code><span class="sig-paren">(</span><em>decorator</em><span class="sig-paren">)</span><a class="headerlink" href="#typing.no_type_check_decorator" title="Permalink to this definition">¶</a></dt>
641
 
<dd><p>Decorator to give another decorator the <a class="reference internal" href="#typing.no_type_check" title="typing.no_type_check"><code class="xref py py-func docutils literal"><span class="pre">no_type_check()</span></code></a> effect.</p>
642
 
<p>This wraps the decorator with something that wraps the decorated
643
 
function in <a class="reference internal" href="#typing.no_type_check" title="typing.no_type_check"><code class="xref py py-func docutils literal"><span class="pre">no_type_check()</span></code></a>.</p>
644
 
</dd></dl>
645
 
 
646
 
</div>
647
 
</div>
648
 
 
649
 
 
650
 
          </div>
651
 
        </div>
652
 
      </div>
653
 
      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
654
 
        <div class="sphinxsidebarwrapper">
655
 
  <h3><a href="../contents.html">Table Of Contents</a></h3>
656
 
  <ul>
657
 
<li><a class="reference internal" href="#">26.1. <code class="docutils literal"><span class="pre">typing</span></code> &#8212; Support for type hints</a><ul>
658
 
<li><a class="reference internal" href="#type-aliases">26.1.1. Type aliases</a></li>
659
 
<li><a class="reference internal" href="#callable">26.1.2. Callable</a></li>
660
 
<li><a class="reference internal" href="#generics">26.1.3. Generics</a></li>
661
 
<li><a class="reference internal" href="#user-defined-generic-types">26.1.4. User-defined generic types</a></li>
662
 
<li><a class="reference internal" href="#the-any-type">26.1.5. The <code class="docutils literal"><span class="pre">Any</span></code> type</a></li>
663
 
<li><a class="reference internal" href="#classes-functions-and-decorators">26.1.6. Classes, functions, and decorators</a></li>
664
 
</ul>
665
 
</li>
666
 
</ul>
667
 
 
668
 
  <h4>Previous topic</h4>
669
 
  <p class="topless"><a href="development.html"
670
 
                        title="previous chapter">26. Development Tools</a></p>
671
 
  <h4>Next topic</h4>
672
 
  <p class="topless"><a href="pydoc.html"
673
 
                        title="next chapter">26.2. <code class="docutils literal"><span class="pre">pydoc</span></code> &#8212; Documentation generator and online help system</a></p>
674
 
<h3>This Page</h3>
675
 
<ul class="this-page-menu">
676
 
  <li><a href="../bugs.html">Report a Bug</a></li>
677
 
  <li><a href="../_sources/library/typing.txt"
678
 
         rel="nofollow">Show Source</a></li>
679
 
</ul>
680
 
 
681
 
<div id="searchbox" style="display: none" role="search">
682
 
  <h3>Quick search</h3>
683
 
    <form class="search" action="../search.html" method="get">
684
 
      <input type="text" name="q" />
685
 
      <input type="submit" value="Go" />
686
 
      <input type="hidden" name="check_keywords" value="yes" />
687
 
      <input type="hidden" name="area" value="default" />
688
 
    </form>
689
 
    <p class="searchtip" style="font-size: 90%">
690
 
    Enter search terms or a module, class or function name.
691
 
    </p>
692
 
</div>
693
 
<script type="text/javascript">$('#searchbox').show(0);</script>
694
 
        </div>
695
 
      </div>
696
 
      <div class="clearer"></div>
697
 
    </div>  
698
 
    <div class="related" role="navigation" aria-label="related navigation">
699
 
      <h3>Navigation</h3>
700
 
      <ul>
701
 
        <li class="right" style="margin-right: 10px">
702
 
          <a href="../genindex.html" title="General Index"
703
 
             >index</a></li>
704
 
        <li class="right" >
705
 
          <a href="../py-modindex.html" title="Python Module Index"
706
 
             >modules</a> |</li>
707
 
        <li class="right" >
708
 
          <a href="pydoc.html" title="26.2. pydoc — Documentation generator and online help system"
709
 
             >next</a> |</li>
710
 
        <li class="right" >
711
 
          <a href="development.html" title="26. Development Tools"
712
 
             >previous</a> |</li>
713
 
        <li><img src="../_static/py.png" alt=""
714
 
                 style="vertical-align: middle; margin-top: -1px"/></li>
715
 
        <li><a href="https://www.python.org/">Python</a> &raquo;</li>
716
 
        <li>
717
 
          <span class="version_switcher_placeholder">3.5.1</span>
718
 
          <a href="../index.html">Documentation </a> &raquo;
719
 
        </li>
720
 
 
721
 
          <li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> &raquo;</li>
722
 
          <li class="nav-item nav-item-2"><a href="development.html" >26. Development Tools</a> &raquo;</li> 
723
 
      </ul>
724
 
    </div>  
725
 
    <div class="footer">
726
 
    &copy; <a href="../copyright.html">Copyright</a> 1990-2016, Python Software Foundation.
727
 
    <br />
728
 
    The Python Software Foundation is a non-profit corporation.
729
 
    <a href="https://www.python.org/psf/donations/">Please donate.</a>
730
 
    <br />
731
 
    Last updated on Feb 10, 2016.
732
 
    <a href="../bugs.html">Found a bug</a>?
733
 
    <br />
734
 
    Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.3.3.
735
 
    </div>
736
 
 
737
 
  </body>
738
 
</html>
 
 
b'\\ No newline at end of file'