简体   繁体   中英

inheritance in python 2.7.x

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.

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>

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM