Python __loader__,它是什么?

时间:2014-03-05 00:08:00

标签: python loader python-import

我已经看到__loader__这个词漂浮在一些Python文件中,除了一些关于它的目的的简短描述之外,我找不到任何文档,但它们仍然存在没有为我提供足够的信息以便更好地了解它。我所知道的是它与导入模块有关,除了我完全不知所措。它有什么作用?什么时候使用?如果可以的话我该怎么用?

1 个答案:

答案 0 :(得分:12)

  

什么是__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>
>>>

  

什么是装载机?

loader是查找程序返回的对象。它使用其load_module()方法将模块加载到内存中。 importlib.abc.Loader是加载器的抽象基类的一个示例。


  

什么是发现者?

finder是一个使用其find_module()方法尝试查找模块加载器的对象。 importlib.abc.Finder是查找程序的抽象基类的示例。但请注意,它已被弃用,而不是importlib.abc.MetaPathFinderimportlib.abc.PathEntryFinder


  

如果有的话,我该如何使用?

__loader__的主要用途是内省。但是,还有另外两种常见用途:

  1. __loader__可用于收集特定模块的加载程序上的数据。

  2. 在3.3之前的Python版本中,__loader__可与hasattr一起使用,以检查是否使用内置导入机制导入模块:

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

    如果hasattr(os, '__loader__')返回True,则表示使用自定义加载程序导入os模块。由于它没有,这意味着该模块是使用内置的导入机器导入的。

    注意:由于PEP 0302所做的更改,上述测试在Python 3.3+中无效。