Принимает ровно 3 аргумента (4 дано)

Я рефакторинг кода, чтобы добавить объектную ориентацию, и я просто тестирую код.

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

При создании экземпляра класса ниже я получаю странную ошибку. Что getip() принимает ровно 3 аргумента (4 дано), которые я не знаю, как решить.

for theline in f:

    if "Failed password" in theline:

        lineclass = Lineobject(pattern, theline)

    else:
        pass

2 ответа

Вы даете self.getip() четыре аргумента, потому что Python автоматически добавляет в первую очередь self аргумент для связанных методов. Выражение:

self.getip(self, pattern, line)

результаты в:

getip(self, self, pattern, line)

что четыре аргумента.

Не проходите в self снова:

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

Сам акт поиска метода в экземпляре (через self.getip) связывает метод для обработки этого первого аргумента для вас.

При вызове метода экземпляра вы не передаете экземпляр явно

то есть.

self.ip = self.getip(pattern, line)
Другие вопросы по тегам