inheritance in python 2.7.x
inheritance in python 2.7.x
Considering your indentation is correct then in Python2 a class should inherit from object
, otherwise it would be considered as a classic class. And you cant use super
on a classic class.
So, if Quad
is defined like this, then it is wrong:
class Quad:
def __init__(self, x):
pass
And instantiating Square
will raise error like this:
>>> Square(12)
...
super(Square, self).__init__(linesValue)
TypeError: must be type, not classobj
Change Quad
to inherit from object
:
class Quad(object):
def __init__(self, x):
print x
Demo:
>>> Square(12)
12
<__main__.Square object at 0x93e286c>
You have bad indentation, and so your super is outside of __init__
. Compare:
>>> class Square(Quad):
... def __init__(self, linesValue):
... Calls the builder in quad (same)
... super(Square, self).__init__(linesValue)
...
>>>
and
>>> class Square(Quad):
... def __init__(self, linesValue):
... Calls the builder in quad (same)
... super(type(Square), self).__init__(linesValue)
...
Traceback (most recent call last):
...
TypeError: super(type, obj): obj must be an instance or subtype of type
and
>>> class Square(Quad):
... def __init__(self, linesValue):
... Calls the builder in quad (same)
... super(Square, self).__init__(linesValue)
...
Traceback (most recent call last):
...
TypeError: super(type, obj): obj must be an instance or subtype of type