use*_*473 14 python loader python-import
我已经看到这个术语__loader__浮动在一些Python文件中,除了一些关于它的目的的简短描述之外我找不到任何文档,但它们仍然没有为我提供足够的信息以便对它有一个很好的理解.我所知道的是它与导入模块有关,除此之外我完全不知所措.它有什么作用?什么时候使用?如果有的话我怎么用呢?
iCo*_*dez 13
什么是
__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>
>>>
Run Code Online (Sandbox Code Playgroud)
什么是装载机?
甲装载机是受取景器返回的对象.它使用其load_module()方法将模块加载到内存中. importlib.abc.Loader是一个加载器的抽象基类的示例.
什么是发现者?
一个取景器是使用它的对象find_module()方法,试图找到一个模块加载器. importlib.abc.Finder是查找程序的抽象基类的示例.但请注意,它已被弃用以支持importlib.abc.MetaPathFinder和importlib.abc.PathEntryFinder.
如果有的话,我该如何使用它?
主要用途__loader__是内省.但是,还有另外两种常见用途:
__loader__ 可用于收集特定模块的加载器上的数据.
在3.3之前的Python版本中,__loader__可以用于hasattr检查是否使用内置导入机制导入模块:
>>> # Python 3.2 interpreter
>>> import os
>>> hasattr(os, '__loader__')
False
>>>
Run Code Online (Sandbox Code Playgroud)
如果hasattr(os, '__loader__')已返回True,则意味着os使用自定义加载程序导入模块.由于它没有,这意味着该模块是使用内置的导入机器导入的.
注意:由于PEP 0302所做的更改,上述测试在Python 3.3+中不起作用.
| 归档时间: |
|
| 查看次数: |
5723 次 |
| 最近记录: |