Skip to content

Commit

Permalink
[doc] Teach 0-args form of super in Programming FAQ (GH-22176)
Browse files Browse the repository at this point in the history
  • Loading branch information
andresdelfino committed Sep 20, 2020
1 parent 5c0eed7 commit 778ad92
Showing 1 changed file with 7 additions and 8 deletions.
15 changes: 7 additions & 8 deletions Doc/faq/programming.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1504,20 +1504,19 @@ Most :meth:`__setattr__` implementations must modify ``self.__dict__`` to store
local state for self without causing an infinite recursion.


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

Use the built-in :func:`super` function::

class Derived(Base):
def meth(self):
super(Derived, self).meth()
super().meth() # calls Base.meth

For version prior to 3.0, you may be using classic classes: For a class
definition such as ``class Derived(Base): ...`` you can call method ``meth()``
defined in ``Base`` (or one of ``Base``'s base classes) as ``Base.meth(self,
arguments...)``. Here, ``Base.meth`` is an unbound method, so you need to
provide the ``self`` argument.
In the example, :func:`super` will automatically determine the instance from
which it was called (the ``self`` value), look up the :term:`method resolution
order` (MRO) with ``type(self).__mro__``, and return the next in line after
``Derived`` in the MRO: ``Base``.


How can I organize my code to make it easier to change the base class?
Expand Down

0 comments on commit 778ad92

Please sign in to comment.