Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Takes exactly 3 arguments (4 given)

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
like image 308
archangel Avatar asked Mar 11 '26 01:03

archangel


2 Answers

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.

like image 173
Martijn Pieters Avatar answered Mar 13 '26 14:03

Martijn Pieters


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

ie.

self.ip = self.getip(pattern, line)
like image 21
John La Rooy Avatar answered Mar 13 '26 15:03

John La Rooy