@@ -616,6 +616,21 @@ These can be used as types in annotations and do not support ``[]``.
616
616
avoiding type checker errors with classes that can duck type anywhere or
617
617
are highly dynamic.
618
618
619
+ .. data :: AnyStr
620
+
621
+ ``AnyStr `` is a :ref: `constrained type variable <typing-constrained-typevar >` defined as
622
+ ``AnyStr = TypeVar('AnyStr', str, bytes) ``.
623
+
624
+ It is meant to be used for functions that may accept any kind of string
625
+ without allowing different kinds of strings to mix. For example::
626
+
627
+ def concat(a: AnyStr, b: AnyStr) -> AnyStr:
628
+ return a + b
629
+
630
+ concat(u"foo", u"bar") # Ok, output has type 'unicode'
631
+ concat(b"foo", b"bar") # Ok, output has type 'bytes'
632
+ concat(u"foo", b"bar") # Error, cannot mix unicode and bytes
633
+
619
634
.. data :: LiteralString
620
635
621
636
Special type that includes only literal strings. A string
@@ -917,13 +932,13 @@ These can be used as types in annotations using ``[]``, each having a unique syn
917
932
# We don't need to pass in the lock ourselves thanks to the decorator.
918
933
sum_threadsafe([1.1, 2.2, 3.3])
919
934
920
- .. versionadded :: 3.10
935
+ .. versionadded :: 3.10
921
936
922
- .. seealso ::
937
+ .. seealso ::
923
938
924
- * :pep: `612 ` -- Parameter Specification Variables (the PEP which introduced
925
- ``ParamSpec `` and ``Concatenate ``).
926
- * :class: `ParamSpec ` and :class: `Callable `.
939
+ * :pep: `612 ` -- Parameter Specification Variables (the PEP which introduced
940
+ ``ParamSpec `` and ``Concatenate ``).
941
+ * :class: `ParamSpec ` and :class: `Callable `.
927
942
928
943
929
944
.. class :: Type(Generic[CT_co])
@@ -1208,6 +1223,49 @@ These can be used as types in annotations using ``[]``, each having a unique syn
1208
1223
.. versionadded :: 3.10
1209
1224
1210
1225
1226
+ .. data :: Unpack
1227
+
1228
+ A typing operator that conceptually marks an object as having been
1229
+ unpacked. For example, using the unpack operator ``* `` on a
1230
+ :class: `type variable tuple <TypeVarTuple> ` is equivalent to using ``Unpack ``
1231
+ to mark the type variable tuple as having been unpacked::
1232
+
1233
+ Ts = TypeVarTuple('Ts')
1234
+ tup: tuple[*Ts]
1235
+ # Effectively does:
1236
+ tup: tuple[Unpack[Ts]]
1237
+
1238
+ In fact, ``Unpack `` can be used interchangeably with ``* `` in the context
1239
+ of :class: `typing.TypeVarTuple <TypeVarTuple> ` and
1240
+ :class: `builtins.tuple <tuple> ` types. You might see ``Unpack `` being used
1241
+ explicitly in older versions of Python, where ``* `` couldn't be used in
1242
+ certain places::
1243
+
1244
+ # In older versions of Python, TypeVarTuple and Unpack
1245
+ # are located in the `typing_extensions` backports package.
1246
+ from typing_extensions import TypeVarTuple, Unpack
1247
+
1248
+ Ts = TypeVarTuple('Ts')
1249
+ tup: tuple[*Ts] # Syntax error on Python <= 3.10!
1250
+ tup: tuple[Unpack[Ts]] # Semantically equivalent, and backwards-compatible
1251
+
1252
+ ``Unpack `` can also be used along with :class: `typing.TypedDict ` for typing
1253
+ ``**kwargs `` in a function signature::
1254
+
1255
+ from typing import TypedDict, Unpack
1256
+
1257
+ class Movie(TypedDict):
1258
+ name: str
1259
+ year: int
1260
+
1261
+ # This function expects two keyword arguments - `name` of type `str`
1262
+ # and `year` of type `int`.
1263
+ def foo(**kwargs: Unpack[Movie]): ...
1264
+
1265
+ See :pep: `692 ` for more details on using ``Unpack `` for ``**kwargs `` typing.
1266
+
1267
+ .. versionadded :: 3.11
1268
+
1211
1269
Building generic types
1212
1270
""""""""""""""""""""""
1213
1271
@@ -1409,49 +1467,6 @@ These are not used in annotations. They are building blocks for creating generic
1409
1467
1410
1468
.. versionadded :: 3.11
1411
1469
1412
- .. data :: Unpack
1413
-
1414
- A typing operator that conceptually marks an object as having been
1415
- unpacked. For example, using the unpack operator ``* `` on a
1416
- :class: `type variable tuple <TypeVarTuple> ` is equivalent to using ``Unpack ``
1417
- to mark the type variable tuple as having been unpacked::
1418
-
1419
- Ts = TypeVarTuple('Ts')
1420
- tup: tuple[*Ts]
1421
- # Effectively does:
1422
- tup: tuple[Unpack[Ts]]
1423
-
1424
- In fact, ``Unpack `` can be used interchangeably with ``* `` in the context
1425
- of :class: `typing.TypeVarTuple <TypeVarTuple> ` and
1426
- :class: `builtins.tuple <tuple> ` types. You might see ``Unpack `` being used
1427
- explicitly in older versions of Python, where ``* `` couldn't be used in
1428
- certain places::
1429
-
1430
- # In older versions of Python, TypeVarTuple and Unpack
1431
- # are located in the `typing_extensions` backports package.
1432
- from typing_extensions import TypeVarTuple, Unpack
1433
-
1434
- Ts = TypeVarTuple('Ts')
1435
- tup: tuple[*Ts] # Syntax error on Python <= 3.10!
1436
- tup: tuple[Unpack[Ts]] # Semantically equivalent, and backwards-compatible
1437
-
1438
- ``Unpack `` can also be used along with :class: `typing.TypedDict ` for typing
1439
- ``**kwargs `` in a function signature::
1440
-
1441
- from typing import TypedDict, Unpack
1442
-
1443
- class Movie(TypedDict):
1444
- name: str
1445
- year: int
1446
-
1447
- # This function expects two keyword arguments - `name` of type `str`
1448
- # and `year` of type `int`.
1449
- def foo(**kwargs: Unpack[Movie]): ...
1450
-
1451
- See :pep: `692 ` for more details on using ``Unpack `` for ``**kwargs `` typing.
1452
-
1453
- .. versionadded :: 3.11
1454
-
1455
1470
.. class :: ParamSpec(name, *, bound=None, covariant=False, contravariant=False)
1456
1471
1457
1472
Parameter specification variable. A specialized version of
@@ -1550,20 +1565,93 @@ These are not used in annotations. They are building blocks for creating generic
1550
1565
.. versionadded :: 3.10
1551
1566
1552
1567
1553
- .. data :: AnyStr
1568
+ Other special directives
1569
+ """"""""""""""""""""""""
1554
1570
1555
- ``AnyStr `` is a :ref: `constrained type variable <typing-constrained-typevar >` defined as
1556
- ``AnyStr = TypeVar('AnyStr', str, bytes) ``.
1571
+ These are not used in annotations. They are building blocks for declaring types.
1557
1572
1558
- It is meant to be used for functions that may accept any kind of string
1559
- without allowing different kinds of strings to mix. For example::
1573
+ .. class :: NamedTuple
1560
1574
1561
- def concat(a: AnyStr, b: AnyStr) -> AnyStr:
1562
- return a + b
1575
+ Typed version of :func: `collections.namedtuple `.
1563
1576
1564
- concat(u"foo", u"bar") # Ok, output has type 'unicode'
1565
- concat(b"foo", b"bar") # Ok, output has type 'bytes'
1566
- concat(u"foo", b"bar") # Error, cannot mix unicode and bytes
1577
+ Usage::
1578
+
1579
+ class Employee(NamedTuple):
1580
+ name: str
1581
+ id: int
1582
+
1583
+ This is equivalent to::
1584
+
1585
+ Employee = collections.namedtuple('Employee', ['name', 'id'])
1586
+
1587
+ To give a field a default value, you can assign to it in the class body::
1588
+
1589
+ class Employee(NamedTuple):
1590
+ name: str
1591
+ id: int = 3
1592
+
1593
+ employee = Employee('Guido')
1594
+ assert employee.id == 3
1595
+
1596
+ Fields with a default value must come after any fields without a default.
1597
+
1598
+ The resulting class has an extra attribute ``__annotations__ `` giving a
1599
+ dict that maps the field names to the field types. (The field names are in
1600
+ the ``_fields `` attribute and the default values are in the
1601
+ ``_field_defaults `` attribute, both of which are part of the :func: `~collections.namedtuple `
1602
+ API.)
1603
+
1604
+ ``NamedTuple `` subclasses can also have docstrings and methods::
1605
+
1606
+ class Employee(NamedTuple):
1607
+ """Represents an employee."""
1608
+ name: str
1609
+ id: int = 3
1610
+
1611
+ def __repr__(self) -> str:
1612
+ return f'<Employee {self.name}, id={self.id}>'
1613
+
1614
+ ``NamedTuple `` subclasses can be generic::
1615
+
1616
+ class Group(NamedTuple, Generic[T]):
1617
+ key: T
1618
+ group: list[T]
1619
+
1620
+ Backward-compatible usage::
1621
+
1622
+ Employee = NamedTuple('Employee', [('name', str), ('id', int)])
1623
+
1624
+ .. versionchanged :: 3.6
1625
+ Added support for :pep: `526 ` variable annotation syntax.
1626
+
1627
+ .. versionchanged :: 3.6.1
1628
+ Added support for default values, methods, and docstrings.
1629
+
1630
+ .. versionchanged :: 3.8
1631
+ The ``_field_types `` and ``__annotations__ `` attributes are
1632
+ now regular dictionaries instead of instances of ``OrderedDict ``.
1633
+
1634
+ .. versionchanged :: 3.9
1635
+ Removed the ``_field_types `` attribute in favor of the more
1636
+ standard ``__annotations__ `` attribute which has the same information.
1637
+
1638
+ .. versionchanged :: 3.11
1639
+ Added support for generic namedtuples.
1640
+
1641
+ .. class :: NewType(name, tp)
1642
+
1643
+ A helper class to indicate a distinct type to a typechecker,
1644
+ see :ref: `distinct `. At runtime it returns an object that returns
1645
+ its argument when called.
1646
+ Usage::
1647
+
1648
+ UserId = NewType('UserId', int)
1649
+ first_user = UserId(1)
1650
+
1651
+ .. versionadded :: 3.5.2
1652
+
1653
+ .. versionchanged :: 3.10
1654
+ ``NewType `` is now a class rather than a function.
1567
1655
1568
1656
.. class :: Protocol(Generic)
1569
1657
@@ -1659,94 +1747,6 @@ These are not used in annotations. They are building blocks for creating generic
1659
1747
for more details.
1660
1748
1661
1749
1662
- Other special directives
1663
- """"""""""""""""""""""""
1664
-
1665
- These are not used in annotations. They are building blocks for declaring types.
1666
-
1667
- .. class :: NamedTuple
1668
-
1669
- Typed version of :func: `collections.namedtuple `.
1670
-
1671
- Usage::
1672
-
1673
- class Employee(NamedTuple):
1674
- name: str
1675
- id: int
1676
-
1677
- This is equivalent to::
1678
-
1679
- Employee = collections.namedtuple('Employee', ['name', 'id'])
1680
-
1681
- To give a field a default value, you can assign to it in the class body::
1682
-
1683
- class Employee(NamedTuple):
1684
- name: str
1685
- id: int = 3
1686
-
1687
- employee = Employee('Guido')
1688
- assert employee.id == 3
1689
-
1690
- Fields with a default value must come after any fields without a default.
1691
-
1692
- The resulting class has an extra attribute ``__annotations__ `` giving a
1693
- dict that maps the field names to the field types. (The field names are in
1694
- the ``_fields `` attribute and the default values are in the
1695
- ``_field_defaults `` attribute, both of which are part of the :func: `~collections.namedtuple `
1696
- API.)
1697
-
1698
- ``NamedTuple `` subclasses can also have docstrings and methods::
1699
-
1700
- class Employee(NamedTuple):
1701
- """Represents an employee."""
1702
- name: str
1703
- id: int = 3
1704
-
1705
- def __repr__(self) -> str:
1706
- return f'<Employee {self.name}, id={self.id}>'
1707
-
1708
- ``NamedTuple `` subclasses can be generic::
1709
-
1710
- class Group(NamedTuple, Generic[T]):
1711
- key: T
1712
- group: list[T]
1713
-
1714
- Backward-compatible usage::
1715
-
1716
- Employee = NamedTuple('Employee', [('name', str), ('id', int)])
1717
-
1718
- .. versionchanged :: 3.6
1719
- Added support for :pep: `526 ` variable annotation syntax.
1720
-
1721
- .. versionchanged :: 3.6.1
1722
- Added support for default values, methods, and docstrings.
1723
-
1724
- .. versionchanged :: 3.8
1725
- The ``_field_types `` and ``__annotations__ `` attributes are
1726
- now regular dictionaries instead of instances of ``OrderedDict ``.
1727
-
1728
- .. versionchanged :: 3.9
1729
- Removed the ``_field_types `` attribute in favor of the more
1730
- standard ``__annotations__ `` attribute which has the same information.
1731
-
1732
- .. versionchanged :: 3.11
1733
- Added support for generic namedtuples.
1734
-
1735
- .. class :: NewType(name, tp)
1736
-
1737
- A helper class to indicate a distinct type to a typechecker,
1738
- see :ref: `distinct `. At runtime it returns an object that returns
1739
- its argument when called.
1740
- Usage::
1741
-
1742
- UserId = NewType('UserId', int)
1743
- first_user = UserId(1)
1744
-
1745
- .. versionadded :: 3.5.2
1746
-
1747
- .. versionchanged :: 3.10
1748
- ``NewType `` is now a class rather than a function.
1749
-
1750
1750
.. class :: TypedDict(dict)
1751
1751
1752
1752
Special construct to add type hints to a dictionary.
0 commit comments