2013-10-25 154 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)