I did this code:
class Square(Quad):
def __init__(self, linesValue):
"""Calls the builder in quad (same)"""
super(Square, self).__init__(linesValue)
then It said I have to send type as first arg, so I did this:
class Square(Quad):
def __init__(self, linesValue):
"""Calls the builder in quad (same)"""
super(type(Square), self).__init__(linesValue)
then it said obj must be instance of subinstance of class, and as you can see Square(Quad) it is.
2 Answers 2
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 can't 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>
3 Comments
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
supershould be in__init__(it's currently at the scope of the function definition).Quad? It should inherit fromobject.