覆盖模块类型定义

时间:2017-08-15 02:44:19

标签: python python-requests

假设我使用的是使用请求模块的第三方API。像:

import requests

class ThirdPartyAPI(object):
    '''
    A pretend API
    '''
    def __init__(self):
        self._session = requests.Session()

我希望API能够使用FuturesSession形式requets-futures模块,而无需编辑API源代码

我是否必须像这样继承ThirdPartyAPI

from requests_futures.sessions import FuturesSession

class SubAPI(ThirdPartyAPI):
    '''
    Dependency inject a FuturesRequets session
    '''
    def __init__(self):
        super().__init__()
        self._session = FuturesSession()

这似乎不是最好的方法。如上例所示_session被写入两次,即使我只想要第二次分配的对象。

这通常是如何处理的?或者最好的方法呢?

P.S:我知道这只是实施异步请求到第三方API的冰山一角。因为所有响应将成为未来的对象。 (一步到位)

1 个答案:

答案 0 :(得分:2)

从性能的角度来看,这不是最好的方法,因为您创建了一个不必要的对象。但是考虑到不修改基础对象的约束,它是唯一的可能的方式。如果不调用其构造函数,则不能使用“ThirdPartyAPI”。

在大型OO库中执行此类操作并不罕见:PyQt在许多情况下通过将一个组件替换为复杂类中的另一个组件来获得一些自定义行为。