Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Python – TypeError: generateID() takes 3 positional arguments but 4 were given

My script contains 4 classes and 1 interface. I have a method generateID which generate an ID according to outputmode, a mode (modeCB) and a dataframe (data_h_f). When I execute my class I have this error :

TypeError: generateID() takes 3 positional arguments but 4 were given

I’m beginner in python especially objected oriented programming, I don’t know if the design of my script is good. I have 3 arguments for my method generateID() and 3 parameters everywere.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

class OutputMode(object):
    def __init__(self,name,startTime,intervalSeconds,timezone):
    ...

class IDCalculation_I:
    def generateID(outputMode,modeCB,data_h_df):
        pass

class IDCase1(IDCalculation_I):
    def generateID(outputMode,modeCB,data_h_df):
    ...

class Fingerprinter(object):
    def __init__(self,outputMode,modeCB=CONST_MODE_CONT):
        self._modeCB     = modeCB
        self._outputMode = outputMode

    def generateID(outputMode,modeCB,data_h_df):
        pass

    def run(self):
        return self.generateID(outputMode,modeCB,data_h_df)

def main():
    outputMode = OutputMode('EEA','06:00',8*3600,pytz.timezone('Europe/Paris'))
    f1 = Fingerprinter(outputMode, CONST_MODE_CONT)
    t = f1.generateID(outputMode,CONST_MODE_CONT,data_h_df)

if __name__ == '__main__':
    main()

>Solution :

class IDCalculation_I:
    def generateID(self,outputMode,modeCB,data_h_df):
        pass

class IDCase1(IDCalculation_I):
    def generateID(self, outputMode,modeCB,data_h_df):
    ...

class Fingerprinter(object):
    def __init__(self,outputMode,modeCB=CONST_MODE_CONT):
        self._modeCB     = modeCB
        self._outputMode = outputMode

    def generateID(self,outputMode,modeCB,data_h_df):
        pass

    def run(self):
        return self.generateID(outputMode,modeCB,data_h_df)

You forgot to add self. Or use @staticmethod decorator if you don’t want to add self.

class IDCalculation_I:
    @staticmethod
    def generateID(outputMode,modeCB,data_h_df):
        pass

class IDCase1(IDCalculation_I):
    @staticmethod
    def generateID(outputMode,modeCB,data_h_df):
    ...

class Fingerprinter(object):
    def __init__(self,outputMode,modeCB=CONST_MODE_CONT):
        self._modeCB     = modeCB
        self._outputMode = outputMode

    @staticmethod
    def generateID(outputMode,modeCB,data_h_df):
        pass

    def run(self):
        return self.generateID(outputMode,modeCB,data_h_df)
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading