2017-08-15 106 views
2

假設我正在使用使用請求模塊的第三方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中實現異步請求的冰山一角。因爲所有的迴應都會成爲未來的對象。 (一步到位)

回答

2

從性能的角度來看,它不是最好的方法,因爲你創建了一個不必要的對象。但考慮到不修改基礎對象的限制,它是唯一可能的方式。在不調用構造函數的情況下不能使用「ThirdPartyAPI」。

在大型OO庫中做這類事情並不少見:PyQt在很多情況下通過用複雜類中的另一個組件替換一個組件來獲得一些自定義行爲。

+0

好的,太棒了。謝謝,我需要反彈一下,以檢查它是否合法。 –