繁体   English   中英

使用“importlib”从 Python 模块导入特定的 Class

[英]Impoting specific Class from a Python module with `importlib`

go 如何使用其路径从 Python 模块导入特定的 Class ?

我需要使用文件路径从 Python 文件中导入特定的 Class。
我无法控制该文件,它完全在我的 package 之外。


文件.py:

class Wanted(metaclass=MyMeta):
    ...

class Unwanted(metaclass=MyMeta):
    ...

元类实现在这里不相关,
但是,我会指出它是我的 package 的一部分,我完全控制它。

导入示例:

spec = importlib.util.spec_from_file_location(name='Wanted', location="path_to_module/mudule.py")
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)

这有效,并且Wanted导入。
问题是Unwanted也被导入了。
事实上,只要为name提供了任何srt值(包括空字符串)
WantedUnwanted都是从模块中导入的。

这与之前的示例具有相同的效果,其中导入了WantedUnwanted
importlib.util.spec_from_file_location(name='random string', location="path_to_module/mudule.py")

我不是在寻找使用importlib的特定解决方案
任何合理的方式都可以。
我会指出我不需要在导入时使用 Class,
我只需要导入,我的 Metaclass 将负责 rest。

因为您将文件命名为“file.py”:

from file import Wanted

如果您的文件在文件夹中,您可以使用:

from folder.file import Wanted

首先,如果我没记错的话,'name' 参数只是您为尝试导入的模块提供的名称。 其次,当你导入任何模块时,你基本上是在执行其中的每一行代码,所以在这种情况下,这两个类都被创建了。 使用“from module import foo”还是只使用“import module”都没关系。 唯一的区别是,在第一种情况下,“foo”将从全局命名空间中变得可用。

Python 程序由代码块构成。 块是作为一个单元执行的一段 Python 程序文本。 以下是块:一个模块、一个 function 主体和一个 class 定义。

资料来源: https://docs.python.org/3/reference/executionmodel.html#structure-of-a-program

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM