104 votes

TypeError: worker() prend 0 arguments positionnels mais 1 a été donné

Je suis en train d'essayer de mettre en œuvre une sous-classe et cela provoque l'erreur :

TypeError: worker() prend 0 arguments positionnels mais 1 a été donné

class KeyStatisticCollection(DataDownloadUtilities.DataDownloadCollection):
    def GenerateAddressStrings(self):
        pass    
    def worker():
        pass
    def DownloadProc(self):
        pass

170voto

Atra Azami Points 1885

Votre méthode worker a besoin de 'self' en tant que paramètre, car c'est une méthode de classe et non une fonction. Ajouter cela devrait le faire fonctionner correctement.

38voto

LeilaHC Points 191

Si la méthode ne nécessite pas self comme argument, vous pouvez utiliser le décorateur @staticmethod pour éviter l'erreur :

class KeyStatisticCollection(DataDownloadUtilities.DataDownloadCollection):

    def GenerateAddressStrings(self):
        pass    

    @staticmethod
    def worker():
        pass

    def DownloadProc(self):
        pass

Voir https://docs.python.org/3/library/functions.html#staticmethod

20voto

Haidro Points 24336

Vous avez oublié d'ajouter self en tant que paramètre de la fonction worker() de la classe KeyStatisticCollection.

18voto

Stryker Points 1474

Cela peut être déroutant surtout lorsque vous ne passez aucun argument à la méthode. Alors, qu'est-ce qui se passe?

Lorsque vous appelez une méthode sur une classe (comme work() dans ce cas), Python passe automatiquement self comme premier argument.

Relisons cela une fois de plus: Lorsque vous appelez une méthode sur une classe (comme work() dans ce cas), Python passe automatiquement self comme premier argument

Donc ici, Python dit, hey je peux voir que work() prend 0 arguments positionnels (parce que vous n'avez rien à l'intérieur des parenthèses) mais vous savez que l'argument self est toujours passé automatiquement lorsque la méthode est appelée. Alors vous feriez mieux de corriger cela et de remettre ce mot-clé self.

Ajouter self devrait résoudre le problème. work(self)

class KeyStatisticCollection(DataDownloadUtilities.DataDownloadCollection):
def GenerateAddressStrings(self):
    pass    
def worker(self):
    pass
def DownloadProc(self):
    pass

6voto

Nitesh Sharma Points 61
class KeyStatisticCollection(DataDownloadUtilities.DataDownloadCollection):
def GenerateAddressStrings(self):
    pass    
def worker(self):
    pass
def DownloadProc(self):
    pass

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X