2015-04-11 4 views
1

Je refactoring le code afin d'ajouter l'orientation de l'objet et je suis juste en train de tester le code.Prend exactement 3 arguments (4 donnés)

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 

Lors de l'instanciation de la classe ci-dessous, j'obtiens une erreur impaire. Celui de getip() prend exactement 3 arguments (4 donnés) que je ne sais pas comment résoudre.

for theline in f: 

    if "Failed password" in theline: 

     lineclass = Lineobject(pattern, theline) 

    else: 
     pass 
+2

'self' est passé implicitement lorsque vous appelez une méthode d'instance sur une instance - qui devrait être' self.ip = self.getip (modèle, ligne) ' – jonrsharpe

Répondre

7

Vous donnez self.getip() quatre arguments parce que Python ajoute automatiquement dans le premier argument self pour les méthodes liées. L'expression:

self.getip(self, pattern, line) 

résultats dans:

getip(self, self, pattern, line) 

qui est quatre arguments.

Ne passez pas self à nouveau:

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

L'acte même de regarder la méthode sur l'instance (via self.getip) se fixe la méthode pour gérer ce premier argument pour vous.

2

Lorsque vous appelez une méthode d'instance, vous ne passez pas l'instance explicitement

ie.

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