10

我有这堂课:

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

4

4 回答 4

17

你正在做:

Thread.__init__() 

利用:

Thread.__init__(self) 

或者,更确切地说,使用super()

于 2009-10-23T18:29:40.457 回答
9

这是 SO 的一个常见问题,但简而言之,您调用超类的构造函数的方式如下:

super(Timer,self).__init__()
于 2009-10-23T18:29:06.510 回答
3

首先,你必须使用的原因:

Thread.__init__(self)

代替

Thread.__init__()

是因为您使用的是类名,而不是对象(类的实例),因此您不能以与对象相同的方式调用方法。

其次,如果您使用的是 Python 3,从子类调用超类方法的推荐样式是:

super().method_name(parameters)

虽然在 Python 3 中可以使用:

SuperClassName.method_name(self, parameters)

这是一种旧的语法风格,不是首选风格。

于 2015-11-03T18:39:03.300 回答
1

您只需将 'self' 作为参数传递给 'Thread. 初始化'。之后,它可以在我的机器上运行。

于 2009-10-23T18:29:54.170 回答