简单地将变量传递给类

时间:2011-11-30 11:48:35

标签: python class variables

为什么这不起作用?

class spin(threading.Thread):  
        def __init__(self):
                super(spin,self).__init__()
                self._stop = False
        def run (self,var):
                self.var=var
                print self.var
        def echo (self,var):
                self.var=var
                print self.var

if __name__ == '__main__':

        s = spin()
        s.start('hello')

但是这样做了?

    s = spin()
    s.echo('hello')

我猜它是因为启动顺序需要在init中定义?但不确定如何。有人要求提供错误代码:

    s.start('hello')
TypeError: start() takes exactly 1 argument (2 given)

1 个答案:

答案 0 :(得分:2)

s.start('hello')不起作用的原因是,继承的Threadin.start()方法不使用self以外的参数。

调用s.echo('hello')似乎确实有效,但它在主线程的上下文中调用该函数,而不是生成一个新线程。

修复代码的一种方法是向构造函数提供var

import threading

class Spin(threading.Thread):  
    def __init__(self,var):
        super(Spin,self).__init__()
        self.var = var
    def run(self):
        print self.var

if __name__ == '__main__':
    s = Spin('hello')
    s.start()
    s.join()