I have the following Python 2.7 code:
class Frame:
def __init__(self, image):
self.image = image
class Eye(Frame):
def __init__(self, image):
super(Eye, self).__init__()
self.some_other_defined_stuff()
I'm trying to extend the __init__()
method so that when I instantiate an 'Eye' it does a bunch of other stuff (self.some_other_defined_stuff()), in addition to what Frame sets up. Frame.__init__()
needs to run first.
I get the following error:
super(Eye, self).__init__()
TypeError: must be type, not classobj
Which I do not understand the logical cause of. Can someone explain please? I'm used to just typing 'super' in ruby.
There are two errors here:
super()
only works for new-style classes; use object
as a base class for Frame
to make it use new-style semantics.
You still need to call the overridden method with the right arguments; pass in image
to the __init__
call.
So the correct code would be:
class Frame(object):
def __init__(self, image):
self.image = image
class Eye(Frame):
def __init__(self, image):
super(Eye, self).__init__(image)
self.some_other_defined_stuff()