Adding Extra Functionality To Parent Class Method Without Changing Its Name
Solution 1:
You can always call code from the parent using the super()
function. It gives a reference to the parent. So, to call parent_method()
, you should use super().parent_method()
.
Here's a code snippet (for python3) that shows how to use it.
class ParentClass:
def f(self):
print("Hi!");
class ChildClass(ParentClass):
def f(self):
super().f();
print("Hello!");
In python2, you need to call super with extra arguments: super(ChildClass, self)
. So, the snippet would become:
class ParentClass:
def f(self):
print("Hi!");
class ChildClass(ParentClass):
def f(self):
super(ChildClass, self).f();
print("Hello!");
If you call f()
on an instance of ChildClass, it will show: "Hi! Hello!".
If you already coded in java, it's basically te same behaviour. You can call super wherever you want. In a method, in the init function, ...
There are also other ways to do that but it's less clean. For instance, you can do:
ParentClass.f(self)
To call the f function of parent class.
Solution 2:
This is what the super
function does.
class Child(Parent):
def __init__(self):
super(Child, self).__init__()
def method_parent(self):
super(Child, self).method_parent()
print "Child"
In Python 3, you can call super
without the arguments, like super().method_parent()
Solution 3:
You can call the parent method exactly the same way you used for the __init__
one:
class Child(Parent):
def __init__(self):
Parent.__init__(self)
def method_parent(self):
Parent.method_parent(self) # call method on Parent
print "Child"
This one is when you want to explicitely name the parent class. If you prefere, you can ask python to give you next class in Method Resolution Order by using super
:
def method_parent(self):
super(Child, self).method_parent() # call method on Parent
print "Child"
Post a Comment for "Adding Extra Functionality To Parent Class Method Without Changing Its Name"