Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么要在这个API设计模式中使用回调?_Python - Fatal编程技术网

Python 为什么要在这个API设计模式中使用回调?

Python 为什么要在这个API设计模式中使用回调?,python,Python,我一直在使用一个API包,该API包是为特定站点上的algotrading而设计的,在我使用它的过程中,我发现使用的一些设计模式非常混乱,让我不禁要问他们为什么要这样做,下面是我正在使用的: class IBapi(EWrapper, EClient): def openOrder(self, orderId, contract, order, orderState): super().openOrder(orderId, contract, order, orderS

我一直在使用一个API包,该API包是为特定站点上的algotrading而设计的,在我使用它的过程中,我发现使用的一些设计模式非常混乱,让我不禁要问他们为什么要这样做,下面是我正在使用的:

class IBapi(EWrapper, EClient):

    def openOrder(self, orderId, contract, order, orderState):
        super().openOrder(orderId, contract, order, orderState)
        print(order) 


app = IBapi()
app.connect('127.0.0.1', 7497, 123)
app.reqAllOpenOrders() #This triggers the above openOrder method as per their design pattern via a callback
我有一个类IBApi,它继承了父类EWrapper和EClient,因此我现在可以使用
super()
符号访问这两个类中的任何方法。如果我想访问(比如说我当前的未结订单),文档会说调用方法
app.reqAllOpenOrders
,然后触发回调,执行我在IBApi类中覆盖的
openOrder
方法,这意味着我可以点击该方法并获取数据


从逻辑上讲,这对我来说是有意义的,但我想问的是,为什么要使用这种设计模式?这有什么特别的原因吗?为什么他们没有一个更接近的方法,你可以调用say some method
app.getOrders
,它返回我需要的所有数据的列表,而不使用回调?

看起来
rekallopenorders
恰好在它的定义中调用了
openOrder
,这只是一个内部函数调用,从技术上讲不是回调例程。当然,您可以重写继承的
openOrder
方法的定义,并执行您想执行的操作。这里没有发生什么疯狂的事情。是的,这是有道理的,我想我只是想得太多了,奇怪的是,几乎所有你可以调用
app
对象的内置方法都要求你覆盖其他父方法来获取数据,与其只是调用say arbitral app.getData并返回一个物理对象/列表,还不如说他们正在实现某种接口设计模式,默认情况下Python并不支持这种模式,所以您必须做一些有趣的事情来模拟它。基本上,任何继承
EWrapper
EClient
的类都必须为某些方法提供定义,例如,它看起来像
requalOpenOrders
只是碰巧在其定义中调用
openOrder
,这只是一个内部函数调用,从技术上讲不是回调例程。当然,您可以重写继承的
openOrder
方法的定义,并执行您想执行的操作。这里没有发生什么疯狂的事情。是的,这是有道理的,我想我只是想得太多了,奇怪的是,几乎所有你可以调用
app
对象的内置方法都要求你覆盖其他父方法来获取数据,与其只是调用say arbitral app.getData并返回一个物理对象/列表,还不如说他们正在实现某种接口设计模式,默认情况下Python并不支持这种模式,所以您必须做一些有趣的事情来模拟它。基本上,任何继承
EWrapper
EClient
的类都必须为某些方法提供定义,例如。