Суперкласс __init__, не признающий его kwargs

Я пытаюсь использовать класс StoppableThread представленный как ответ на другой вопрос :

 import threading # Technique for creating a thread that can be stopped safely # Posted by Bluebird75 on StackOverflow class StoppableThread(threading.Thread): """Thread class with a stop() method. The thread itself has to check regularly for the stopped() condition.""" def __init__(self): super(StoppableThread, self).__init__() self._stop = threading.Event() def stop(self): self._stop.set() def stopped(self): return self._stop.isSet() 

Однако, если я запустил что-то вроде:

 st = StoppableThread(target=func) 

Я получил:

TypeError: __init__() получил неожиданный аргумент ключевого слова 'target'

Возможно, надзор за тем, как это следует использовать.

Класс StoppableThread не принимает и не передает никаких дополнительных аргументов для threading.Thread в конструкторе. Вам нужно сделать что-то вроде этого:

 class StoppableThread(threading.Thread): """Thread class with a stop() method. The thread itself has to check regularly for the stopped() condition.""" def __init__(self,*args,**kwargs): super(threading.Thread,self).__init__(*args,**kwargs) self._stop = threading.Event() 

Это передаст базовый класс как позиционные, так и ключевые слова.

Вы переопределяете init, и ваш init не принимает никаких аргументов. Вы должны добавить аргумент «target» и передать его конструктору базового класса с супер или даже лучше разрешить произвольные аргументы через * args и * kwargs.

Т.е.

 def __init__(self,*args,**kwargs): super(threading.Thread,self).__init__(*args,**kwargs) self._stop = threading.Event()