是什么导致这个Python代码出现“未绑定的方法__init__()必须以实例作为第一个参数”错误?
我有一个这样的类:
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()
但是我遇到了这个错误,我搞不清楚为什么:未绑定的方法 __init__() 必须以实例作为第一个参数来调用
4 个回答
3
首先,你必须使用:
Thread.__init__(self)
而不是
Thread.__init__()
的原因是因为你在使用类名,而不是类的一个实例(对象),所以你不能像调用对象的方法那样来调用。
其次,如果你使用的是Python 3,从子类调用父类的方法时,推荐的写法是:
super().method_name(parameters)
虽然在Python 3中也可以使用:
SuperClassName.method_name(self, parameters)
但那是一种旧的写法,不是推荐的风格。
9
这是一个在StackOverflow上经常被问到的问题,但简单来说,调用父类构造函数的方法是这样的:
super(Timer,self).__init__()
17
你现在的做法是:
Thread.__init__()
可以改用:
Thread.__init__(self)
或者,更准确地说,使用 super()
。