gpt4 book ai didi

Python __loader__,它是什么?

转载 作者:太空狗 更新时间:2023-10-29 18:27:56 35 4
gpt4 key购买 nike

我看到术语 __loader__ 出现在一些 Python 文件周围,除了一些关于它的用途的简短描述外,我找不到任何关于它的文档,但它们仍然没有提供足够的信息信息让我更好地理解它。我所知道的是它与导入模块有关,除此之外我完全不知所措。它有什么作用?什么时候使用?如果可以,我该如何使用它?

最佳答案

What is __loader__?

__loader__ 是加载器在导入模块上设置的属性。访问它应该返回加载器对象本身。

在 Python 3.3 之前的版本中,__loader__ 不是由内置导入机制设置的。相反,此属性仅适用于使用自定义加载程序导入的模块。

但是,由于 PEP 0302,此功能在 Python 3.3 中发生了变化.现在,__loader__ 可用于每个导入的模块:

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

What is a loader?

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


What is a finder?

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


How can I use it, if at all?

__loader__ 的主要用途是内省(introspection)。但是,还有其他两种常见用途:

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

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

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

    如果 hasattr(os, '__loader__') 返回了 True,则意味着 os 模块是使用自定义加载器导入的.因为它没有,这意味着该模块是使用内置导入机制导入的。

    注意:由于 PEP 0302 所做的更改,上述测试在 Python 3.3+ 中将不起作用。

关于Python __loader__,它是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22185888/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com