простая передача переменных в классы - PullRequest
0 голосов
/ 30 ноября 2011

Почему это не работает?

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 Ответ

2 голосов
/ 30 ноября 2011

Причина, по которой 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...