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'作为参数,因为它是一个类方法而不是函数.添加它应该使它工作正常.
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)
小智 5
class KeyStatisticCollection(DataDownloadUtilities.DataDownloadCollection):
def GenerateAddressStrings(self):
pass
def worker(self):
pass
def DownloadProc(self):
pass
Run Code Online (Sandbox Code Playgroud)