mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
gh-105858: Improve AST node constructors (#105880)
Demonstration: >>> ast.FunctionDef.__annotations__ {'name': <class 'str'>, 'args': <class 'ast.arguments'>, 'body': list[ast.stmt], 'decorator_list': list[ast.expr], 'returns': ast.expr | None, 'type_comment': str | None, 'type_params': list[ast.type_param]} >>> ast.FunctionDef() <stdin>:1: DeprecationWarning: FunctionDef.__init__ missing 1 required positional argument: 'name'. This will become an error in Python 3.15. <stdin>:1: DeprecationWarning: FunctionDef.__init__ missing 1 required positional argument: 'args'. This will become an error in Python 3.15. <ast.FunctionDef object at 0x101959460> >>> node = ast.FunctionDef(name="foo", args=ast.arguments()) >>> node.decorator_list [] >>> ast.FunctionDef(whatever="you want", name="x", args=ast.arguments()) <stdin>:1: DeprecationWarning: FunctionDef.__init__ got an unexpected keyword argument 'whatever'. Support for arbitrary keyword arguments is deprecated and will be removed in Python 3.15. <ast.FunctionDef object at 0x1019581f0>
This commit is contained in:
parent
5a1559d949
commit
ed4dfd8825
10 changed files with 4675 additions and 49 deletions
|
@ -103,20 +103,15 @@ Node classes
|
|||
For example, to create and populate an :class:`ast.UnaryOp` node, you could
|
||||
use ::
|
||||
|
||||
node = ast.UnaryOp()
|
||||
node.op = ast.USub()
|
||||
node.operand = ast.Constant()
|
||||
node.operand.value = 5
|
||||
node.operand.lineno = 0
|
||||
node.operand.col_offset = 0
|
||||
node.lineno = 0
|
||||
node.col_offset = 0
|
||||
|
||||
or the more compact ::
|
||||
|
||||
node = ast.UnaryOp(ast.USub(), ast.Constant(5, lineno=0, col_offset=0),
|
||||
lineno=0, col_offset=0)
|
||||
|
||||
If a field that is optional in the grammar is omitted from the constructor,
|
||||
it defaults to ``None``. If a list field is omitted, it defaults to the empty
|
||||
list. If any other field is omitted, a :exc:`DeprecationWarning` is raised
|
||||
and the AST node will not have this field. In Python 3.15, this condition will
|
||||
raise an error.
|
||||
|
||||
.. versionchanged:: 3.8
|
||||
|
||||
Class :class:`ast.Constant` is now used for all constants.
|
||||
|
@ -140,6 +135,14 @@ Node classes
|
|||
In the meantime, instantiating them will return an instance of
|
||||
a different class.
|
||||
|
||||
.. deprecated-removed:: 3.13 3.15
|
||||
|
||||
Previous versions of Python allowed the creation of AST nodes that were missing
|
||||
required fields. Similarly, AST node constructors allowed arbitrary keyword
|
||||
arguments that were set as attributes of the AST node, even if they did not
|
||||
match any of the fields of the AST node. This behavior is deprecated and will
|
||||
be removed in Python 3.15.
|
||||
|
||||
.. note::
|
||||
The descriptions of the specific node classes displayed here
|
||||
were initially adapted from the fantastic `Green Tree
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue