2015-03-03 67 views
2

我有一個聽起來像委託問題的問題。我有類似下面的代碼:我需要一個委託類?

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

我能做什麼?

回答

1

EventType變量MyBar1MyBar2局部變量。你綁定的任何變量都是本地的,除非另有明確的配置;分配,函數參數,函數或類定義以及名稱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() 
+0

好,好!我是個傻瓜... – EffegiWeb 2015-03-03 11:34:51

+0

坦克的幫助,即使在傳遞參數。 我是新的python編程,我通常在c和Vb.net編寫程序。 – EffegiWeb 2015-03-04 17:12:02

1
EventType=0 

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

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

的問題是,你需要修改全球變量,但你要創建一個本地一個來代替。您仍然可以使用訪問全局變量,而不使用global variable。你需要這個到修改吧。

相關問題