3

我目前正在考虑尝试在 Python 中使用回调。

我想做的是从回调中返回一个值,然后使用这个返回值进行条件处理。因此,例如,如果用户输入“Y”,我想在控制台上打印一些东西。

由于我是 Python 新手,所以下面的代码与我目前所能获得的一样接近,但是:

a)我不确定这是否是 Pythonic 的方式

b) 正确的做法?

    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
4

2 回答 2

4

我能想到的在您的代码中执行此操作的最简单方法是将输入作为变量存储在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
于 2013-10-25T10:04:02.197 回答
1
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)
于 2013-10-25T09:56:52.387 回答