我有这堂课:
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)
我正在用这个脚本调用它:
import timer
def hello():
print \"hello, world
t = timer.Timer(1.0, hello)
t.run()
并收到此错误,我无法弄清楚原因:unbound method __init__() must be called with instance as first argument
答案 0 :(得分:16)
你在做:
Thread.__init__()
使用:
Thread.__init__(self)
或者更确切地说,使用super()
答案 1 :(得分:9)
这是SO的常见问题,但简而言之,答案就是你调用超类的构造函数的方式如下:
super(Timer,self).__init__()
答案 2 :(得分:2)
首先,你必须使用的原因:
Thread.__init__(self)
而不是
Thread.__init__()
是因为您使用的是类名,而不是对象(类的实例),因此您无法以与对象相同的方式调用方法。
其次,如果您使用的是Python 3,那么从子类调用超类方法的推荐样式是:
super().method_name(parameters)
虽然在Python 3中可以使用:
SuperClassName.method_name(self, parameters)
这是一种古老的语法风格,不是首选的风格。
答案 3 :(得分:1)
你只需要将'self'作为参数传递给'Thread。 init '。之后,它可以在我的机器上运行。