可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I have this class:
from threading import Thread import time class Timer(Thread): def __init__(self, interval, function, *args, **kwargs): Thread.__init__() self.interval = interval self.function = function self.args = args self.kwargs = kwargs self.start() def run(self): time.sleep(self.interval) return self.function(*self.args, **self.kwargs)
and am calling it with this script:
import timer def hello(): print \"hello, world t = timer.Timer(1.0, hello) t.run()
and get this error and I can't figure out why: unbound method __init__() must be called with instance as first argument
回答1:
You are doing:
Thread.__init__()
Use:
Thread.__init__(self)
Or, rather, use super()
回答2:
This is a frequently asked question at SO, but the answer, in brief, is that the way you call your superclass's constructor is like:
super(Timer,self).__init__()
回答3:
You just need to pass 'self' as an argument to 'Thread.init'. After that, it works on my machines.
回答4:
First, the reason you must use:
Thread.__init__(self)
instead of
Thread.__init__()
is because you are using the class name, and not an object (an instance of the class), so you cannot call a method in the same way as an object.
Second, if you are using Python 3, the recommended style for invoking a super class method from a sub class is:
super().method_name(parameters)
Although in Python 3 is possible to use:
SuperClassName.method_name(self, parameters)
It is an old style of syntax that is not the prefer style.