我有一个听起来像委托问题的问题。我有一个如下代码:
class foo(object):
def __init__(self,onEvent1="", onEvent2=""):
self.OnEvent1=onEvent1
self.OnEvent1=onEvent2
def aLoop(self):
...
#in case of event1
self.OnEvent1()
...
#in case of event2
self.OnEvent2()
EventType=0
def MyBar1():
print("Event Type1")
EventType=1
def MyBar2():
print("Event Type2")
EventType=2
myFoo=foo(MyBar1,MyBar2)
while True:
myFoo.aLoop()
if (EventType==1):
print ("EventType is 1")
EventType=0
elif (EventType==2):
print ("EventType is 2")
EventType=0
我可以在回调函数中看到print()
的消息,但不能看到while循环中消息的print()
。
变量EventType
不会改变其值。
我能做什么?
答案 0 :(得分:1)
EventType=0
def MyBar1():
global EventType
print("Event Type1")
EventType=1
def MyBar2():
global EventType
print("Event Type2")
EventType=2
问题是,您需要修改全局变量,但您要创建本地变量。您仍然可以访问全局变量,而无需使用global variable
。你需要这个修改它。
答案 1 :(得分:1)
EventType
和MyBar1
中的MyBar2
个变量是局部变量。除非另外明确配置,否则绑定到的任何变量都是本地变量;赋值,函数参数,函数或类定义以及import
的名称都是绑定名称的方法。
您需要使用global
语句来更改此内容:
def MyBar1():
global EventType
print("Event Type1")
EventType=1
def MyBar2():
global EventType
print("Event Type2")
EventType=2
请注意,为您的事件参数提供一个空字符串作为默认参数几乎没有意义:
def __init__(self,onEvent1="", onEvent2=""):
如果它们是可选的,请将它们设置为None
并测试:
def __init__(self, onEvent1=None, onEvent2=None):
self.OnEvent1 = onEvent1
self.OnEvent2 = onEvent2
def aLoop(self):
...
#in case of event1
if self.OnEvent1 is not None:
self.OnEvent1()
...
#in case of event2
if self.OnEvent2 is not None:
self.OnEvent2()