覆盖模块类型定义

2024-10-03 00:30:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

import requests

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

我希望所说的API在不编辑API源代码的情况下使用FuturesSession形式的requets-futures模块

我必须像这样子类ThirdPartyAPI

from requests_futures.sessions import FuturesSession

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

这似乎不是最好的办法。在上面的例子中,_session被写入两次,即使我只想要第二次分配的对象

这通常是如何处理的?还是最好的方法

注:我知道这只是ice在第三方API中实现异步需求的冰山一角。因为所有的响应都将成为未来的对象((一步一个脚印)


Tags: 模块对象importselfapiobjectinitsession
1条回答
网友
1楼 · 发布于 2024-10-03 00:30:58

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

在大型OO库中,这样做并不少见:PyQt在许多情况下都是这样做的,在复杂类中用一个组件替换另一个组件以获得一些定制行为

相关问题 更多 >