Takes exactly 3 arguments (4 given)

14,933

Solution 1

You are giving self.getip() four arguments because Python automatically adds in first self argument for bound methods. The expression:

self.getip(self, pattern, line)

results in:

getip(self, self, pattern, line)

which is four arguments.

Don't pass in self again:

self.ip = self.getip(pattern, line)

The very act of looking up the method on the instance (via self.getip) binds the method to handle that first argument for you.

Solution 2

When calling an instance method, you don't pass the instance explicitly

ie.

self.ip = self.getip(pattern, line)
Share:
14,933
Admin
Author by

Admin

Updated on June 04, 2022

Comments

  • Admin
    Admin almost 2 years

    i'm refactoring code in order to add object orientation and am just testing the code.

    pattern = r"((([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])[ (\[]?(\.|dot)[ )\]]?){3}([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]))"
    
    class Lineobject(object):
    
            def __init__(self, pattern, line):
                self.ip = self.getip(self, pattern, line)
    
            def getip (self, pattern, line):
                    for match in re.findall(pattern, line):
                        results = ''
                        ips = match[0]
                        usergeneratedblacklist.write(ips)
                        usergeneratedblacklist.write('\n')
                        return ips
    

    When instantiating the class below I am getting an odd error. That of getip() takes exactly 3 arguments (4 given) which i do not know how to resolve.

    for theline in f:
    
        if "Failed password" in theline:
    
            lineclass = Lineobject(pattern, theline)
    
        else:
            pass