2014-03-05 50 views
6

我已經看到術語__loader__圍繞着一些Python文件,除了一些關於它的目的的簡要描述外,我找不到任何文檔,但他們仍然沒有提供足夠的信息讓我得到一個很好的理解的。我所知道的是,它與導入模塊有關,除了我完全處於虧損之外。它有什麼作用?何時使用?我如何使用它呢?Python的__loader__,它是什麼?

+0

我不知道......在哪裏你見過它所做的更改?這是有史以來第一次看到類似的東西...... –

+0

我在內置模塊'linecache'中看到了它,我從'traceback'中看到它。 – user3002473

回答

9

什麼是__loader__

__loader__是通過其加載程序在導入的模塊上設置的屬性。訪問它應該返回加載器對象本身。

在3.3之前的Python版本中,__loader__未由內置的導入機制設置。相反,該屬性僅在使用自定義加載器導入的模塊上可用。

但是,由於PEP 0302,此功能在Python 3.3中更改。現在,__loader__可每次導入模塊:

>>> # Python 3.3 interpreter 
>>> import os 
>>> os.__loader__ 
<_frozen_importlib.SourceFileLoader object at 0x01F86370> 
>>> 

什麼是裝載機?

A loader是查找器返回的對象。它使用其load_module()方法將模塊加載到內存中。 importlib.abc.Loader是加載器的抽象基類的一個例子。


什麼是取景器?

A finder是一個對象,它使用其find_module()方法來嘗試查找模塊的加載程序。 importlib.abc.Finder是查找器的抽象基類的一個例子。不過請注意,它已被棄用,有利於importlib.abc.MetaPathFinderimportlib.abc.PathEntryFinder


我如何使用它,如果在所有?

__loader__的主要用途是內省。然而,還有另外兩個常見的用途:

  1. __loader__可用於收集特定模塊的加載數據。

  2. 在Python版本3.3之前,__loader__可以用hasattr用來檢查一個模塊是否被使用內置進口機械進口:

    >>> # Python 3.2 interpreter 
    >>> import os 
    >>> hasattr(os, '__loader__') 
    False 
    >>> 
    

    如果hasattr(os, '__loader__')已經True返回,這將意味着使用定製加載程序導入os模塊。由於沒有,這意味着該模塊是使用內置的導入機器導入的。

    注:以上測試不會在Python工作3.3+因爲通過PEP 0302.