Calling a Method on a Parent Class
Problem
You want to invoke a method in a parent class in place of a method that has been overridden in a subclass.
Solution
To call a method in a parent (or superclass), use the super()
function.
For example:
class
A
(
object
):
def
spam
(
self
):
(
'A.spam'
)
class
B
(
A
):
def
spam
(
self
):
(
'B.spam'
)
super
()
.
spam
()
# Call parent spam()
A very common use of super()
is in the handling
of the __init__()
method to make sure that parents are
properly initialized:
class
A
(
object
):
def
__init__
(
self
):
self
.
x
=
0
class
B
(
A
):
def
__init__
(
self
):
super
()
.
__init__
()
self
.
y
=
1
Another common use of super()
is in code that overrides any
of Python’s special methods. For example:
class
Proxy
(
object
):
def
__init__
(
self
,
obj
):
self
.
_obj
=
obj
# Delegate attribute lookup to internal obj
def
__getattr__
(
self
,
name
):
return
getattr
(
self
.
_obj
,
name
)
# Delegate attribute assignment
def
__setattr__
(
self
,
name
,
value
):
if
name
.
startswith
(
'_'
):
super
()
.
__setattr__
(
name
,
value
)
# Call original __setattr__
else
:
setattr
(
self
.
_obj
,
name
,
value
)
In this code, the implementation of __setattr__()
includes
a name check. If the name starts with an underscore (_), it invokes
the original implementation of __setattr__()
using super()
.
Otherwise, it delegates to the internally held object self._obj ...
Get Calling a Method on a Parent Class now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.