0

2 秒ごとに機能を開始するコード セグメントを以下に記述しました。しかし、それは仕事ではないようです。なんで?

from threading import Timer

class A :
    value = None
    def AX(self):
        value = 12
        obj = B()
        Timer(1,obj.BY, [self.value]).start()
class B:
    def BY(self,value):
        print "refreshed :", value

if __name__=='__main__':
    obj = A()
    obj.AX()
4

1 に答える 1

0

また、を設定 valueするselfか、ローカル変数を引数として使用する必要があります。

def AX(self):
    self.value = 12
    obj = B()
    Timer(1, obj.BY, [self.value]).start()

また:

def AX(self):
    value = 12
    obj = B()
    Timer(1, obj.BY, [value]).start()

これは印刷します:

>>> A().AX()
>>> refreshed : 12

Timer()インスタンスは一obj.BY だけ呼び出すことに注意してください。関数を繰り返し呼び出すことはありません。

BYこれを行うには、呼び出されるたびにタイマーをリセットする必要があります。

class B:
    def BY(self,value):
        print "refreshed :", value
        Timer(2, self.BY, [value]).start()

ループが作成されます。ある時点でそのループを終了する必要がある場合は、次の場所でその条件を個別にテストする必要がありますBY

class B:
    somecondition = False

    def BY(self,value):
        print "refreshed :", value
        if self.somecondition:
            return  # do not set the timer again
        Timer(2, self.BY, [value]).start()
于 2013-03-17T13:35:35.323 に答える