Reputation: 187
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.
Upvotes: 6
Views: 8925
Reputation: 48317
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
Upvotes: 2
Reputation: 250951
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>
Upvotes: 7