@@ -392,6 +392,7 @@ are always available. They are listed here in alphabetical order.
392392 string. The string must be the name of one of the object's attributes. The
393393 function deletes the named attribute, provided the object allows it. For
394394 example, ``delattr(x, 'foobar') `` is equivalent to ``del x.foobar ``.
395+ *name * need not be a Python identifier (see :func: `setattr `).
395396
396397
397398.. _func-dict :
@@ -724,6 +725,7 @@ are always available. They are listed here in alphabetical order.
724725 value of that attribute. For example, ``getattr(x, 'foobar') `` is equivalent to
725726 ``x.foobar ``. If the named attribute does not exist, *default * is returned if
726727 provided, otherwise :exc: `AttributeError ` is raised.
728+ *name * need not be a Python identifier (see :func: `setattr `).
727729
728730 .. note ::
729731
@@ -1577,6 +1579,12 @@ are always available. They are listed here in alphabetical order.
15771579 object allows it. For example, ``setattr(x, 'foobar', 123) `` is equivalent to
15781580 ``x.foobar = 123 ``.
15791581
1582+ *name * need not be a Python identifier as defined in :ref: `identifiers `
1583+ unless the object chooses to enforce that, for example in a custom
1584+ :meth: `~object.__getattribute__ ` or via :attr: `~object.__slots__ `.
1585+ An attribute whose name is not an identifier will not be accessible using
1586+ the dot notation, but is accessible through :func: `getattr ` etc..
1587+
15801588 .. note ::
15811589
15821590 Since :ref: `private name mangling <private-name-mangling >` happens at
0 commit comments