所以我的问题在标题中,以下两段代码是我尝试的。我试图在脚本启动后立即分配变量,然后在特定时间间隔运行循环定义并更新同一变量。我不想使用全局。
from twisted.internet import task, reactor
class DudeWheresMyCar(object):
counter = 20
stringInit = 'initialized string'
def loop():
stringNew = 'this will be updated with a changing string'
if (stringInit == stringNew): #Error line
print(stringNew)
elif (stringInit != stringNew ):
stringInit = stringNew
pass
task.LoopingCall(loop).start(counter)
reactor.run()
这会导致未定义的stringInit错误。我知道为什么我收到此错误所以我尝试使用.self变量修复此问题,代码如下。
from twisted.internet import task, reactor
class DudeWheresMyCar(object):
counter = 20
def __init__(self):
self.stringInit = 'Initialized string'
def loop(self):
stringNew = 'this will be updated with a changing string'
if (self.stringInit == stringNew):
print(stringNew)
elif (self.stringInit != stringNew ):
self.stringInit = stringNew
pass
task.LoopingCall(self.loop).start(counter) #Error line
reactor.run()
我收到一个错误,指出self未定义。我理解是什么导致两种情况都抛出错误,但我不知道如何改变我的方法来实现我的目标。我也遇到了使用单例,但仍未解决方案2中的问题。
答案 0 :(得分:1)
我认为你想要一个classmethod
,你需要在类定义之外启动任务。我希望像下面的代码一样工作
from twisted.internet import task, reactor
class DudeWheresMyCar(object):
counter = 20
stringInit = 'Initialized string'
@classmethod
def loop(cls):
stringNew = 'this will be updated with a changing string'
if (cls.stringInit == stringNew):
print(stringNew)
elif (cls.stringInit != stringNew ):
cls.stringInit = stringNew
task.LoopingCall(DudeWheresMyCar.loop).start(DudeWheresMyCar.counter)
reactor.run()