TypeError:worker()获取0个位置参数但给出了1

Sta*_*Csh 58 python python-3.x

我正在尝试实现一个子类,它会抛出错误:

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
Run Code Online (Sandbox Code Playgroud)

Atr*_*ami 100

您的worker方法需要'self'作为参数,因为它是一个类方法而不是函数.添加它应该使它工作正常.

  • 我第一次看到那个错误,我抓了很长时间.然后从我的经验和你的答案的确认能够弄清楚我的类方法与0参数,在运行时,提供了'自我'参数,这给了我这个错误.python的复杂性. (5认同)

Lei*_*aHC 17

如果方法不需要self作为参数,则可以使用@staticmethod装饰器来避免错误:

class KeyStatisticCollection(DataDownloadUtilities.DataDownloadCollection):

    def GenerateAddressStrings(self):
        pass    

    @staticmethod
    def worker():
        pass

    def DownloadProc(self):
        pass
Run Code Online (Sandbox Code Playgroud)

请参阅https://docs.python.org/3/library/functions.html#staticmethod


Str*_*ker 13

这可能会令人困惑,尤其是当您没有向方法传递任何参数时。那么什么给呢?

当您在类上调用方法时(例如work()在这种情况下),Python 会自动将 self 作为第一个参数传递。

让我们再读一遍: 当你在一个类上调用一个方法时(比如work()在这种情况下),Python 会自动将 self 作为第一个参数传递

所以这里 Python 是说,嘿,我可以看到它work()接受 0 个位置参数(因为括号内没有任何内容),但是您知道在self调用方法时仍然会自动传递该参数 。所以你最好解决这个问题,然后把那个self关键字放回去。

添加self应该可以解决问题。work(self)

class KeyStatisticCollection(DataDownloadUtilities.DataDownloadCollection):
def GenerateAddressStrings(self):
    pass    
def worker(self):
    pass
def DownloadProc(self):
    pass
Run Code Online (Sandbox Code Playgroud)


Ter*_*ryA 12

您忘记将其self作为参数添加到worker()类中的函数中KeyStatisticCollection.


小智 5

class KeyStatisticCollection(DataDownloadUtilities.DataDownloadCollection):
def GenerateAddressStrings(self):
    pass    
def worker(self):
    pass
def DownloadProc(self):
    pass
Run Code Online (Sandbox Code Playgroud)

  • 尽管此代码可以回答问题,但提供有关此代码为何和/或如何回答问题的其他上下文,可以提高其长期价值 (6认同)