Skip to content

Commit

Permalink
Programming FAQ: Mention object.__setattr__ as a technique for delega…
Browse files Browse the repository at this point in the history
…tion (python#124617)

This is used for example by threading.local in the stdlib.
  • Loading branch information
JelleZijlstra authored Sep 26, 2024
1 parent 986a4e1 commit 43979fa
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions Doc/faq/programming.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1613,9 +1613,16 @@ method too, and it must do so carefully. The basic implementation of
self.__dict__[name] = value
...

Most :meth:`!__setattr__` implementations must modify
:attr:`self.__dict__ <object.__dict__>` to store
local state for self without causing an infinite recursion.
Many :meth:`~object.__setattr__` implementations call :meth:`!object.__setattr__` to set
an attribute on self without causing infinite recursion::

class X:
def __setattr__(self, name, value):
# Custom logic here...
object.__setattr__(self, name, value)

Alternatively, it is possible to set attributes by inserting
entries into :attr:`self.__dict__ <object.__dict__>` directly.


How do I call a method defined in a base class from a derived class that extends it?
Expand Down

0 comments on commit 43979fa

Please sign in to comment.