What is a basic example of single inheritance using the super() keyword in Python?
Solution 1
In Python >=3.0, like this:
class Foo():
def __init__(self, frob, frotz)
self.frobnicate = frob
self.frotz = frotz
class Bar(Foo):
def __init__(self, frob, frizzle)
super().__init__(frob, 34)
self.frazzle = frizzle
Read more here: http://docs.python.org/3.1/library/functions.html#super
EDIT: As said in another answer, sometimes just using Foo.__init__(self, frob, 34)
can be the better solution. (For instance, when working with certain forms of multiple inheritance.)
Solution 2
Assuming you want class Bar to set the value 34 within its constructor, this would work:
class Foo(object):
def __init__(self, frob, frotz):
self.frobnicate = frob
self.frotz = frotz
class Bar(Foo):
def __init__(self, frob, frizzle):
super(Bar, self).__init__(frob, frizzle)
self.frotz = 34
self.frazzle = frizzle
bar = Bar(1,2)
print "frobnicate:", bar.frobnicate
print "frotz:", bar.frotz
print "frazzle:", bar.frazzle
However, super
introduces its own complications. See e.g. super considered harmful. For completeness, here's the equivalent version without super
.
class Foo(object):
def __init__(self, frob, frotz):
self.frobnicate = frob
self.frotz = frotz
class Bar(Foo):
def __init__(self, frob, frizzle):
Foo.__init__(self, frob, frizzle)
self.frotz = 34
self.frazzle = frizzle
bar = Bar(1,2)
print "frobnicate:", bar.frobnicate
print "frotz:", bar.frotz
print "frazzle:", bar.frazzle
Elyas Behroozizade
I was a ♦ on Ubuntu StackExchange. More broadly, I'm an Ubuntu and Debian Developer. See my Launchpad profile.
Updated on April 21, 2020Comments
-
Elyas Behroozizade about 4 years
Let's say I have the following classes set up:
class Foo: def __init__(self, frob, frotz): self.frobnicate = frob self.frotz = frotz class Bar: def __init__(self, frob, frizzle): self.frobnicate = frob self.frotz = 34 self.frazzle = frizzle
How can I (if I can at all) use super() in this context to eliminate the duplicate code?