正好需要3个参数(给出4个参数)

时间:2015-04-11 10:47:37

标签: python class arguments self

我正在重构代码以便添加面向对象而我只是测试代码。

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 个答案:

答案 0 :(得分:8)

您正在给self.getip()四个参数,因为Python会自动为绑定方法添加第一个self参数。表达式:

self.getip(self, pattern, line)

结果:

getip(self, self, pattern, line)

这是四个参数。

请勿再次传递self

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

在实例上查找方法的行为(通过self.getip绑定方法来处理第一个参数。

答案 1 :(得分:2)

调用实例方法时,不会显式传递实例

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