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

inheritance in python 2.7.x

Leave a Reply

Your email address will not be published. Required fields are marked *