@@ -403,6 +403,7 @@ are always available. They are listed here in alphabetical order.
403403 string. The string must be the name of one of the object's attributes. The
404404 function deletes the named attribute, provided the object allows it. For
405405 example, ``delattr(x, 'foobar') `` is equivalent to ``del x.foobar ``.
406+ *name * need not be a Python identifier (see :func: `setattr `).
406407
407408
408409.. _func-dict :
@@ -746,6 +747,7 @@ are always available. They are listed here in alphabetical order.
746747 value of that attribute. For example, ``getattr(x, 'foobar') `` is equivalent to
747748 ``x.foobar ``. If the named attribute does not exist, *default * is returned if
748749 provided, otherwise :exc: `AttributeError ` is raised.
750+ *name * need not be a Python identifier (see :func: `setattr `).
749751
750752 .. note ::
751753
@@ -1598,6 +1600,12 @@ are always available. They are listed here in alphabetical order.
15981600 object allows it. For example, ``setattr(x, 'foobar', 123) `` is equivalent to
15991601 ``x.foobar = 123 ``.
16001602
1603+ *name * need not be a Python identifier as defined in :ref: `identifiers `
1604+ unless the object chooses to enforce that, for example in a custom
1605+ :meth: `~object.__getattribute__ ` or via :attr: `~object.__slots__ `.
1606+ An attribute whose name is not an identifier will not be accessible using
1607+ the dot notation, but is accessible through :func: `getattr ` etc..
1608+
16011609 .. note ::
16021610
16031611 Since :ref: `private name mangling <private-name-mangling >` happens at
0 commit comments