What is causing "unbound method __init__() must be called with instance as first argument" from this Python code?
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
You are doing:
Thread.__init__() 
Use:
Thread.__init__(self) 
Or, rather, use super()
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__()
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.
You just need to pass 'self' as an argument to 'Thread.init'. After that, it works on my machines.
 
         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论