Python 我需要一节代表课?

Python 我需要一节代表课?,python,python-3.x,Python,Python 3.x,我有一个听起来像是授权问题的问题。我有如下代码: class foo(object): def __init__(self,onEvent1="", onEvent2=""): self.OnEvent1=onEvent1 self.OnEvent1=onEvent2 def aLoop(self): ... #in case of event1 self.OnEvent1() ..

我有一个听起来像是授权问题的问题。我有如下代码:

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
不会更改其值

我能做什么

EventType=0

def MyBar1():
    global EventType
    print("Event Type1")
    EventType=1

def MyBar2():
    global EventType
    print("Event Type2")
    EventType=2

问题是,您需要修改一个全局变量,但您正在创建一个局部变量。您仍然可以访问全局变量,而无需使用
全局变量
。您需要修改它。
MyBar1
MyBar2
中的
EventType
变量是局部变量。绑定到的任何变量都是本地变量,除非另有明确配置;赋值、函数参数、函数或类定义以及导入的名称都是绑定名称的方法

您需要使用
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()

坦克的帮助,即使在传递的论点。我是python编程新手,通常用c和Vb.net编写程序。