我正在重构代码以便添加面向对象而我只是测试代码。
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
答案 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)