无法在运行python程序时更改变量

无法在运行python程序时更改变量,python,Python,我有一个程序在几个线程上运行,我试图在程序运行时通过电报api更改变量self.pausing。我创建了一个函数,在收到消息时更改变量: 从时间导入睡眠 导入线程 班级计划: 定义初始化(自): self.pausing=False def暂停(自我): 如果self.pausing==False: self.pausing=True 打印('self.pausing=True') elif self.pausing==真: self.pausing=False 打印('self.pausing

我有一个程序在几个线程上运行,我试图在程序运行时通过电报api更改变量
self.pausing
。我创建了一个函数,在收到消息时更改变量:

从时间导入睡眠
导入线程
班级计划:
定义初始化(自):
self.pausing=False
def暂停(自我):
如果self.pausing==False:
self.pausing=True
打印('self.pausing=True')
elif self.pausing==真:
self.pausing=False
打印('self.pausing=False')
def运行(自):
尽管如此:
如果self.pausing==False:
睡眠(2)
打印(自动暂停)
睡眠(2)
打印('做事…')
elif self.pausing==真:
打印('暂停…')
睡眠(2)
def主(自):
threading.Thread(target=telegram().main).start()
threading.Thread(target=self.run).start()
班级电报:
定义初始化(自):
通过
def主(自):
尽管如此:
睡眠(8)
打印('收到消息!')
program().paus()
收到消息后,函数运行并成功打印,但变量
self.pausing
未更改


我想我对self.*变量有些误解。我的预期输出将是要更改的变量。

您跨越类的多个实例,只需生成每个实例中的一个即可

以下是您可以运行的工作代码:

from time import sleep
import threading

class program:
 
    def __init__(self):
        self.pausing = False
        
    def paus(self):
        if self.pausing == False:
            self.pausing = True
            print('self.pausing = True')
        elif self.pausing == True:
            self.pausing = False
            print('self.pausing = False')

    def run(self):
        while True:
            if self.pausing == False:
                sleep(2)
                print(self.pausing)
                sleep(2)
                print('Doing things...')
            elif self.pausing == True:
                print('Pausing..')
                sleep(2)
        
    def main(self):
        prog = self
        tel = telegram(prog)
        threading.Thread(target=tel.main).start()
        threading.Thread(target=prog.run).start()



class telegram:
    
    def __init__(self, prog):
        self.prog = prog
     
    def main(self):
        while True:
            sleep(2)
            print('A message was recieved!')
            self.prog.paus()


p = program()
p.main()

这段代码是可以的,但并不意味着脱离上下文。更可能的情况是根本不调用
paus
。您需要提供一个示例,我将尝试编写一些复制错误的内容。但是如果打印了文本,则会运行该函数,或者,
paus
函数在哪里?我猜是在课堂上,但是你能把课堂也展示给我们看吗?运行函数的代码是什么?应该怎么做?这是在创建
程序的新实例
,对其调用change(),然后丢弃该实例;这就是你想要的吗?如果假设self.var应该在这里更改,那么您可能应该将
program
的单个实例作为参数传递给电报实例。但是,由于您的代码不是一个完整的代码,因此没有人可以运行它来尝试这一点。使用伪电报类,将显示问题的代码设为a。在
Telegram.main()
中,每次都创建一个
程序的新实例。该新实例每次都使用
self.pausing=False
初始化自身。。您应该做的是:您需要将运行
program.main()
program
实例保留在变量中。然后每次都可以在同一个实例上调用
paus()
。我将
telegrame
类的内容移动到
program
中,这同样有效。不过这肯定更实用,谢谢!