Ich versuche eine Unterklasse zu implementieren und es wird der Fehler ausgegeben:
TypeError: worker() takes 0 positional arguments but 1 was given
class KeyStatisticCollection(DataDownloadUtilities.DataDownloadCollection):
def GenerateAddressStrings(self):
pass
def worker():
pass
def DownloadProc(self):
pass
python
python-3.x
StatsViaCsh
quelle
quelle
Antworten:
Ihre
worker
Methode benötigt 'self' als Parameter, da es sich um eine Klassenmethode und nicht um eine Funktion handelt. Wenn Sie das hinzufügen, sollte es gut funktionieren.quelle
Wenn die Methode kein
self
Argument benötigt, können Sie den@staticmethod
Dekorator verwenden, um den Fehler zu vermeiden:class KeyStatisticCollection(DataDownloadUtilities.DataDownloadCollection): def GenerateAddressStrings(self): pass @staticmethod def worker(): pass def DownloadProc(self): pass
Siehe https://docs.python.org/3/library/functions.html#staticmethod
quelle
Sie haben vergessen,
self
der Funktionworker()
in der Klasse einen Parameter hinzuzufügenKeyStatisticCollection
.quelle
Dies kann verwirrend sein, insbesondere wenn Sie der Methode kein Argument übergeben. Also, was gibt es?
Wenn Sie eine Methode für eine Klasse aufrufen (wie
work()
in diesem Fall), übergibt Python automatisch self als erstes Argument.Lesen wir das noch einmal: Wenn Sie eine Methode für eine Klasse aufrufen (wie
work()
in diesem Fall), übergibt Python sich automatisch als erstes ArgumentHier sagt Python also, hey, ich kann sehen, dass
work()
0 Positionsargumente benötigt werden (weil Sie nichts in der Klammer haben), aber Sie wissen, dass dasself
Argument beim Aufruf der Methode immer noch automatisch übergeben wird. Sie sollten dies also besser beheben und dasself
Schlüsselwort wieder einfügen.Das Hinzufügen
self
sollte das Problem beheben.work(self)
class KeyStatisticCollection(DataDownloadUtilities.DataDownloadCollection): def GenerateAddressStrings(self): pass def worker(self): pass def DownloadProc(self): pass
quelle
class KeyStatisticCollection(DataDownloadUtilities.DataDownloadCollection): def GenerateAddressStrings(self): pass def worker(self): pass def DownloadProc(self): pass
quelle
Überprüfen Sie, ob Sie von der Methode mit dem Namen method_a () eine Methode mit dem gleichen Namen method_a (with_params) aufrufen, die eine Rekursion verursacht
quelle
Ein weiterer Anwendungsfall für diesen Fehler ist das Importieren von Funktionen innerhalb der Klassendefinition. Dadurch werden die nachfolgenden Funktionsaufrufe Teil des Klassenobjekts. In diesem Fall können Sie @staticmethod für die Bibliotheksimportfunktion verwenden oder einen statischen Pfadaufruf direkt an die Funktion senden. siehe Beispiel unten
In diesem Beispiel löst "self.bar ()" einen TypeError aus, der jedoch auf zwei Arten behoben werden kann
# in lib.py def bar(): print('something to do') # in foo.py class foo(): from .lib import bar def __init__(self): self.bar()
Option 1:
# in lib.py def bar(): print('something to do') # in foo.py class foo(): from .lib import bar def __init__(self): lib.bar()
Option 2:
# in lib.py: @staticmethod def bar(): print('something to do') # in foo.py class foo(): from .lib import bar def __init__(self): self.bar()
quelle
Bei der Flask Basic-Authentifizierung wurde dieser Fehler angezeigt, und dann wurde mir klar, dass ich wrap_view (** kwargs) hatte und es funktionierte, nachdem ich es in wrapped_view (* args, ** kwargs) geändert hatte.
quelle