简体   繁体   中英

super() gives an error in Python 2

I just started learning Python and I don't quite understand where the problem in this code is. I have a base class Proband with two methods and I want to create a subclass Gesunder and I want to override the attributes idn,artefakte.

import scipy.io
class Proband:
  def __init__(self,idn,artefakte):
    self.__idn = idn
    self.artefakte = artefakte
  def getData(self):
    path = 'C:\matlab\EKGnurbild_von Proband'+ str(self.idn)
    return scipy.io.loadmat(path)
  def __eq__(self,neueProband):
    return self.idn == neueProband.idn and self.artefakte == neueProband.artefakte



class Gesunder(Proband):
  def __init__(self,idn,artefakte,sportler):
    super().__init__(self,idn,artefakte)
    self.__sportler = sportler

hans = Gesunder(2,3,3)

You have 2 problems in your code. In python 2:

  1. super() takes 2 arguments: the class name, and the instance
  2. in order to use super() , the base class must inherit from object

So your code becomes:

import scipy.io

class Proband(object):
    def __init__(self,idn,artefakte):
        self.__idn = idn
        self.artefakte = artefakte
    def getData(self):
        path = 'C:\matlab\EKGnurbild_von Proband'+ str(self.idn)
        return scipy.io.loadmat(path)
    def __eq__(self,neueProband):
        return self.idn == neueProband.idn and self.artefakte == neueProband.artefakte

class Gesunder(Proband):
    def __init__(self,idn,artefakte,sportler):
        super(Gesunder, self).__init__(idn,artefakte)
        self.__sportler = sportler

hans = Gesunder(2,3,3)

Note the the call to super(Gesunder, self).__init__ does not have self as the first argument.

In Python 2, super() on its own is invalid. Instead, you must use super(ClassName, self) .

super(Gesunder, self).__init__(self, idn, artefakte)

super()调用应修改为:

super(Gesunder, self).__init__(self, idn, artefakte)

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