2013-10-25 152 views
1

我目前正在試圖在Python中使用回調。在Python中從回調中返回值

我想要做的是從回調中返回一個值,然後使用此返回值進行條件處理。例如,如果用戶輸入「Y」,我想打印一些東西給控制檯。

由於我是新來的Python下面的代碼是接近我可以得到當前但:

一)我不知道這是否是做

二)正確的Python的方式這樣做的方法?

class Observable: 
     def subscribe(self,callback): 
      self.callback = callback 

     def fire(self): 
      self.callback() 

    class CallBackStuff: 
     def doCallback(self): 
      userInput = raw_input("Please enter Y or N?") 
      return userInput 

    if __name__ == '__main__': 
     s = CallBackStuff() 
     o = Observable() 
     o.subscribe(s.doCallback) 
     t = o.fire() 
     print t 
+3

爲什麼不只是'返回self.callback()'? – BartoszKP

+0

@GamesBrainiac相關但沒有返回值我認爲 – BartoszKP

+0

@BartoszKP你說得對。 –

回答

1

我能想到的要做到這一點在你的代碼最簡單的方法是將輸入的變量只是存儲爲 在CallBackStuff對象。然後在調用回調函數後,您可以訪問CallBackStuff實例中的輸入數據。下面的例子。

class Observable: 
    def subscribe(self,callback): 
     self.callback = callback 

    def fire(self): 
     self.callback() 

class CallBackStuff: 
    storedInput = None # Class member to store the input 
    def doCallback(self): 
     self.storedInput = raw_input("Please enter Y or N?") 

if __name__ == '__main__': 
    s = CallBackStuff() 
    o = Observable() 
    o.subscribe(s.doCallback) 
    o.fire() 
    print s.storedInput # Print stored input from call-back object 
0
class Observable(object): 
    def __call__(self, fun): 
     return fun() 


class Callback(object): 
    def docallback(self): 
     inp = raw_input() 
     return inp 

if __name__ == "__main__": 
    print Observable()(Callback().docallback)