91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

通過字符串導入 Python 模塊的方法詳解

發布時間:2020-10-08 00:57:10 來源:腳本之家 閱讀:174 作者:青南 欄目:開發技術

我們平時導入第三方模塊的時候,一般使用的是 import 關鍵字,例如:

import scrapy
from scrapy.spider import Spider

但是如果各位同學看過 Scrapy 的 settings.py 文件,就會發現里面會通過字符串的方式來指定pipeline 和 middleware,例如:

DOWNLOADER_MIDDLEWARES = {
   'Test.middlewares.ExceptionRetryMiddleware': 545,
   'Test.middlewares.BOProxyMiddlewareV2': 543,
 }
 
 SPIDER_MIDDLEWARES = {
  'Test.middlewares.LoggingRequestMiddleware': 543,
 }

我們知道,這里的 Test.middlewares.ExceptionRetryMiddleware 實際上對應了根目錄下面的 Test 文件夾里面的 middlewares.py 文件中的 ExceptionRetryMiddleware 類。那么 Scrapy 是如何根據這個字符串,導入這個類的呢?

在 Scrapy 源代碼中,我們可以找到 相關的代碼 :

def load_object(path):
  """Load an object given its absolute object path, and return it.
  object can be a class, function, variable or an instance.
  path ie: 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware'
  """
  try:
    dot = path.rindex('.')
  except ValueError:
    raise ValueError("Error loading object '%s': not a full path" % path)
  module, name = path[:dot], path[dot+1:]
  mod = import_module(module)
  try:
    obj = getattr(mod, name)
  except AttributeError:
    raise NameError("Module '%s' doesn't define any object named '%s'" % (module, name))
  return obj

根據這段代碼,我們知道,它使用了 importlib 模塊的 import_module 函數:

首先根據字符串路徑最右側的 . 把字符串路徑分成兩個部分,例如: Test.middlewares.LoggingRequestMiddleware 分成 Test.middlewares 和 LoggingRequestMiddleware

使用 import_module 導入左邊的部分

從左邊部分通過 getattr 獲得具體的類

現在我們來測試一下。我們創建的測試文件結構如下圖所示:

通過字符串導入 Python 模塊的方法詳解 

其中, pipelines.py 文件的內容如下圖所示:

通過字符串導入 Python 模塊的方法詳解  

main.py 文件的內容如下圖所示:

通過字符串導入 Python 模塊的方法詳解 

運行 main.py ,可以看到 pipelines.py 中的 Pipeline 類被成功執行了,如下圖所示:

通過字符串導入 Python 模塊的方法詳解 

總結

以上所述是小編給大家介紹的通過字符串導入 Python 模塊的方法詳解,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新龙县| 秦安县| 孙吴县| 杭锦后旗| 岚皋县| 吴堡县| 山丹县| 山阳县| 安溪县| 米泉市| 六安市| 金堂县| 舒兰市| 当阳市| 油尖旺区| 和平县| 都安| 福州市| 黄石市| 乐山市| 子长县| 哈巴河县| 南和县| 古田县| 潜山县| 灌南县| 峡江县| 陈巴尔虎旗| 祁东县| 彰武县| 板桥市| 鹿邑县| 黎城县| 那曲县| 贵溪市| 平定县| 德钦县| 海南省| 上饶市| 定兴县| 三门峡市|